Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Cześć.
Od jakiegoś czasu zauważyłem, że na jednym z kompów skacze load do 5.0, później spada. Zebrałem statystyki przez /usr/lib/sysstat/sadc. Jedyne co widzę to, iowait skacze i nie widać na statystykach użycia dysku żeby cokolwiek zapisywał/odczytywał na dysk. Czy znacie jakiś sposób/narzędzie dzięki któremu będę mógł zrzucić dane per każdy proces ? Możliwe, że jakiś proces chce coś bardzo szybko zapisać.
Ostatnio edytowany przez ukasz (2014-08-11 23:32:34)
Offline
Jak to się zdarza często, i możesz poczekać przy konsoli,
to polecam htop i iotop.
Rzuć okiem na to:
http://www.tummy.com/articles/isolating-heavy-load/
Ostatnio edytowany przez Jacekalex (2014-08-11 11:43:59)
Offline
Mniej więcej co 1,5 godziny. Co do siedzenia przed konsolą to nie zawsze mam czas. Będę się starał.
Offline
Top może zrzucić listę procesów do pliku, jeśli umiesz wyciągnąć z tego, co rozrabia, to może przydałby się skrypcio w type:
if $LOAD >5; then top {opcje} -n1 >>/var/log/wynik.txt; fi;
$LOAD możesz wyczesać np z wyniku uptime.
Taki skrypcik odpalany co np 3 minuty może trochę pomóc.
Możesz też porobić dla podejrzanych programów "kagańce" przy pomocy cgroup.
Ostatnio edytowany przez Jacekalex (2014-08-11 12:04:54)
Offline
Naskrobałem coś takiego.
#! /bin/sh load=`cat /proc/loadavg | awk '{print $1}'` barrier="2.0" while true; do if [ $(echo "$load > $barrier" | bc ) -eq 1 ] then top -bn1 >> /tmp/top-dump ps aux >> /tmp/ps-dump fi done
Pozostaję tylko czekać. o 11:55:30 miałem już loada. Następny pewnie będzie koło 13:30.
Ostatnio edytowany przez ukasz (2014-08-11 12:42:05)
Offline
Dodaj tam sleep 60 albo 180 w pętli, bo jak odpalisz tego skrypta w takiej formie, to ta pętla while dopiero Ci load zrobi. :D
Ostatnio edytowany przez Jacekalex (2014-08-11 14:18:26)
Offline
Właśnie zauważyłem. Ok odpalone.
Ostatnio edytowany przez ukasz (2014-08-11 12:44:25)
Offline
Ja bym też czytanie /proc/loadavg wsadził do wnętrza pętli, bo inaczej to chyba raz wczyta wynik, i trzyma go do wyłączenia.
EDIT:
#!/bin/bash while true; do load=$(awk '{print $1}' /proc/loadavg) barier="2.0" wynik=$(echo "$load > $barier"| bc); if [ "$wynik" -eq 1 ] then top -bn1 fi; sleep 60; done;
Gotowe - u mnie. ;)
Ostatnio edytowany przez Jacekalex (2014-08-11 14:55:44)
Offline
[quote=Jacekalex]Ja bym też czytanie /proc/loadavg wsadził do wnętrza pętli, bo inaczej to chyba raz wczyta wynik, i trzyma go do wyłączenia.[/quote]
Ehhh. No tak. Zakręt ze mnie :P
Offline
Ostateczna wersja u mnie:
#!/bin/bash while true; do load=$(awk '{print $1}' /proc/loadavg) barier="2.0" wynik=$(echo "$load > $barier"| bc); if [ "$wynik" -eq 1 ] then echo "load wynosi $load"; fi; unset load; sleep 60; done;
Tylko wstaw swoje polecenia zamiast echo $load.
dodałem czyszczenie zmiennej load na końcu pętli dla pewności.
Puściłem w pętli sekundowej w czasie kompilacji jajka:
load wynosi 8.04 load wynosi 8.04 load wynosi 8.04 load wynosi 8.04 load wynosi 7.88 load wynosi 7.88 load wynosi 7.88 load wynosi 7.88 load wynosi 7.88 load wynosi 7.89 load wynosi 7.89 load wynosi 7.89
Wszelkie znaki na niebie i ziemi twierdzą, że chodzi.
Chociaż do porównywania liczb dziesiętnych lepiej brać język programowania, np Perla.
Odpada wtedy użycie bc, jako protezy.
Pozdro
;-)
Ostatnio edytowany przez Jacekalex (2014-08-11 17:46:12)
Offline
[quote=ethanak]Wystarczy awk[/quote]
Wiem, że wystarczy, ale nie chciało mi się kombinować.
Perl tym bardziej by wystarczył, o C/C++ nie wspominając w ogóle. :D
Ostatnio edytowany przez Jacekalex (2014-08-11 21:21:14)
Offline
Poza tym i tak używasz awka... naprawdę, uwierz mi - toto ma nieco więcej możliwości niż "print $cośtam"
Offline
Jest taki przycisk „Edytuj ”. Zastanawiałeś się może kiedyś do czego on służy?
Offline
[quote=ethanak]Perl to przerośnięty awk :-P[/quote]
Perl wyrósł z Awka, bo Awk nie potrafił się nauczyć obsługi XMl, baz SQL, protokołów sieciowych, i miliona innych rzeczy.
Perl w tej chwili jest pełnoprawnym językiem programowania, co nie do wszystkich dociera.
Jak ktoś nie rozumie, o czym napisałem, to niech sobie spróbuje przepisać Spamassasina lub Amavisa na AWK. :D
Taka próba programiście zajmie najwyżej 30 sekund. :xD
Ostatnio edytowany przez Jacekalex (2014-08-11 18:36:19)
Offline
@yossarian: przyzwyczaiłem się do forów które automatycznie uznają następny post wysłany w określonym czasie jako edycję poprzedniego. Akurat zbyt rzadko takiej funkcji używam aby zauważyć, że skrypt na dugu tego nie potrafi.
Jeśli możesz wyświadczyć mi pewną uprzejmość - podaj jakiś odnośnik do tego, czego skrypt na dugu nie potrafi, dostosuję się.
@jacekalex: jeśli używasz awka do wyciągnięcia pozycji z linii (do czego spokojnie wystarczy cut) a potem czort wie po co przepuszczasz wyniki przez bc... sorry, nie wypowiem się, ale sam powinieneś wiedzieć co chciałem powiedzieć.
Offline
[quote=ethanak]@yossarian: przyzwyczaiłem się do forów które automatycznie uznają następny post wysłany w określonym czasie jako edycję poprzedniego. Akurat zbyt rzadko takiej funkcji używam aby zauważyć, że skrypt na dugu tego nie potrafi.
Jeśli możesz wyświadczyć mi pewną uprzejmość - podaj jakiś odnośnik do tego, czego skrypt na dugu nie potrafi, dostosuję się.[/quote]
Wiem, że nie potrafi robić kawy ;)
Nikt tu nie lata z paragrafami szukając użytkowników do udupienia.
Po prostu kilka wiadomości wysyłanych pod rząd zazwyczaj niebyt dobrze wygląda.
Offline
Ja poprawiłem trochę skrypta, który naskrobał Autor wątku, bez szczególnego zagłębiania się w szczegóły, po prostu, żeby zadziałał.
$(echo "zmienna >$zmienna2" |bc) mnie się też nie podoba, ale jak bash nie rozumie liczb dziesiętnych, to cóż ja na to poradzę?
Pocieszę niektórych, że w Perlu z liczbami dziesiętnymi i ułamkowymi nie ma żadnego problemu.
Ostatnio edytowany przez Jacekalex (2014-08-11 21:29:03)
Offline
Skrypt zebrał trochę danych. Niestety nie widać żeby którykolwiek z procesów używał mocno IO. Podejrzewam, że nie wyłapał tego momentu (który może trwać kilka sekund) w którym jakiś proces jechał po dysku, Pozostaję mi tylko siedzenie przed konsolą i czajenie się na zarazę :P. Jedyne co mi jeszcze do głowy przychodzi to iotop. Dzięki wszystkim za pomoc.
Ostatnio edytowany przez ukasz (2014-08-11 22:01:03)
Offline
Cgroup - do dyzia jest blkio - dzieli wg zadanego algorymtu zasoby między procesy.
Może warto się pobawić?
Jak coś takiego porobiłem dla cpu i ram, i mam względny spokój.
PS
w skrypcie obok top możesz użyć np:
iotop -o -b -n1
w ogóle warto zajrzeć do:
man iotop
Ostatnio edytowany przez Jacekalex (2014-08-11 22:12:08)
Offline
Poczytałem szybko man iotop i odpalę skrypt tylko z iotop -ot. zobaczymy co mi to pokaże. Dzięki za informację. Nigdy nie robiłem nic z cgroups.
Offline
Cgroup jest dość banale w konfiguracji.
U mnie przez jakiś cholerny błąd nie chciał czytać konfigu cgconfig.conf,
więc stanęło na dwóch rzeczach:
Ten skrypcio robi konfigurację zamiast cgconfig:
http://jacekalex.sh.dug.net.pl/cgstart
To jest konfig demona cgred:
http://jacekalex.sh.dug.net.pl/cgrules.conf
Potem tylko musi wstać demon cgred, czyli proces:
root 6327 0.0 0.0 22228 3868 ? Ss 21:34 0:04 /usr/sbin/cgrulesengd --nodaemon --nolog
Gotowe.
Offline
OK. Znaleziony problem. RRdcached. Co jakieś 2 godziny zapisuje dane na dysk. Zmniejszyłem timeouty -w 60 -f 360. Dalej skacze load. Przynajmniej już nagios nie wysyła powiadomień. Ehhh. Nigdy nie zrozumiem rrdcached.
Offline
Jeżeli to RRDcached ci przymula, to jedziesz z Cgroup, albo Cpulimit, Softlimit względnie Ionice, i gotowe.
Nie ma się co certolić, jak mamusia z łobuzem, żaden program nie ma prawa przymulać systemu.
Offline
Time (s) | Query |
---|---|
0.00015 | SET CHARSET latin2 |
0.00005 | SET NAMES latin2 |
0.00225 | SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='3.144.2.5' WHERE u.id=1 |
0.00125 | REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '3.144.2.5', 1733043835) |
0.00053 | SELECT * FROM punbb_online WHERE logged<1733043535 |
0.00084 | SELECT topic_id FROM punbb_posts WHERE id=272967 |
0.00005 | SELECT id FROM punbb_posts WHERE topic_id=26240 ORDER BY posted |
0.00131 | SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=26240 AND t.moved_to IS NULL |
0.00006 | SELECT search_for, replace_with FROM punbb_censoring |
0.00578 | SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=26240 ORDER BY p.id LIMIT 0,25 |
0.00138 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=26240 |
Total query time: 0.01365 s |