Strona 1 z 1

Apache2: 100% CPU bez wyraźnej przyczyny

: 22 września 2009, 14:18
autor: marecek
Jak w temacie: pacjent to Apache/2.2.3 (Debian4) PHP/5.2.0-8+etch15 mod_ssl/2.2.3 OpenSSL/0.9.8c Server Built: Jul 29 2009 10:30:58. Usługi obsługiwane to klasyczne fora php+mysql (vbulletin x2 + phpby przemo x2).

Z niewiadomych przyczyn po starcie apache-a obciążenie szybuje w stronę 100%. Dzieje się to sporadycznie od tygodnia. Do dziś wystarczyło "obrócić" usługę httpd i wszystko wracało do normy. Aktualnie - serwer jest non stop w pełni obciążony nawet po restarcie usługi. Okazuje się też, że apache będzie konsumował 100% zasobów nawet, jeśli pozbawię go folderu www (tzn. obetnę gałąź, w której zgromadzone są wszystkie zasoby publikowane). Restart usługi sprawia, że sytuacja normuje się na kilka minut, po czym obciążenie wraca do 100%.

Nie zanotowałem żadnych nadmiernych prób wyłudzenia hasła (fail2ban ubija średnio 5 delikwentów dziennie, liczba ta nie rośnie), na serwerze nie pracują żadni użytkownicy, obciążenie jest na stałym poziomie (tzn. na forach przebywa stała ilość użytkowników, a rozkład dobowy obciążenia jest przewidywalny i w miarę stały od lat).

Co ciekawe nie widać żadnego negatywnego wpływu tego zjawiska na czas ładowania stron obsługiwanych przez tego apache-a.

Poniżej zrzuty z webminstats:
Obrazek

i w większej skali:
Obrazek

atop pokazuje coś takiego:

Kod: Zaznacz cały

ATOP - localhost 2009/09/22  14:15:51               10 seconds elapsed
PRC | sys   0.24s | user  19.72s | #thr     218 | #zombie    0 | #exit      8 |
CPU | sys      3% | user    197% | irq       0% | idle      0% | wait      0% |
cpu | sys      2% | user     98% | irq       0% | idle      0% | cpu000 w  0% |
cpu | sys      0% | user    100% | irq       0% | idle      0% | cpu001 w  0% |
MEM | tot    3.8G | free  713.2M | cache   1.1G | buff   59.5M | slab  208.5M |
SWP | tot    2.0G | free    1.5G |              | vmcom   3.2G | vmlim   3.9G |
DSK |         sda | busy      1% | read       0 | write    173 | avio    0 ms |
DSK |         sdb | busy      0% | read       1 | write     36 | avio    0 ms |
NET |   transport | tcpi     886 | tcpo     962 | udpi       0 | udpo       0 |
NET |     network | ipi      886 | ipo      967 | ipfrw      0 | deliv    886 |
NET | dev    eth0 | pcki     814 | pcko     896 | in  132 Kbps | out 644 Kbps |
NET | dev      lo | pcki      72 | pcko      72 | in    9 Kbps | out   9 Kbps |

  PID  SYSCPU  USRCPU  VGROW  RGROW USERNAME THR  ST EXC  S  CPU CMD     1/4
15265   0.00s   2.56s     0K     0K www-data   1  --   -  R  26% apache2
15502   0.00s   2.50s     0K     0K www-data   1  --   -  R  25% apache2
15258   0.00s   2.43s     0K     0K www-data   1  --   -  R  24% apache2
15456   0.00s   2.41s     0K     0K www-data   1  --   -  R  24% apache2
15386   0.01s   2.26s     0K     0K www-data   1  --   -  R  23% apache2
15153   0.00s   2.20s     0K     0K www-data   1  --   -  R  22% apache2
15004   0.00s   2.20s     0K     0K www-data   1  --   -  R  22% apache2
 2553   0.16s   0.89s     0K     0K mysql     69  --   -  S  10% mysqld
17400   0.02s   0.70s   768K   788K www-data   1  --   -  S   7% apache2
16696   0.00s   0.24s     0K     0K www-data   1  --   -  S   2% apache2
17300   0.00s   0.20s -1792K -1412K www-data   1  --   -  S   2% apache2
17095   0.00s   0.18s   512K   184K www-data   1  --   -  S   2% apache2
17412   0.01s   0.16s -3328K -3156K www-data   1  --   -  S   2% apache2
17404   0.00s   0.15s -2560K -2356K www-data   1  --   -  S   2% apache2
17249   0.00s   0.11s  1280K  1188K www-data   1  --   -  S   1% apache2
17406   0.00s   0.10s     0K     8K www-data   1  --   -  S   1% apache2
...natomiast server-status w ogóle wydaje się nie być świadomym obciążenia, które generuje apache:

Kod: Zaznacz cały

Apache Server Status for localhost
Server Version: Apache/2.2.3 (Debian) PHP/5.2.0-8+etch15 mod_ssl/2.2.3 OpenSSL/0.9.8c 
Server Built: Jul 29 2009 10:30:58 

--------------------------------------------------------------------------------

Current Time: Tuesday, 22-Sep-2009 13:58:03 CEST 
Restart Time: Tuesday, 22-Sep-2009 13:43:16 CEST 
Parent Server Generation: 0 
Server uptime: 14 minutes 46 seconds 
Total accesses: 32899 - Total Traffic: 116.6 MB 
CPU Usage: u109.86 s6.59 cu0 cs0 - 13.1% CPU load 
37.1 requests/sec - 134.7 kB/second - 3715 B/request 
112 requests currently being processed, 16 idle workers 
KKKKKKKKKWK_KKKKK_WKKKKKKKK.K_KKKKK.K.KKKKKKKKKKKKK.KWK..KKK.KK.
KK.K.WKKW_K._KKKK.KKW.KKK_KKKK.WWKKK_K_KK_.CK_KK_K_KK.KWK._.K_KK
KKKK.__.KKKKKK..KKKWKK..........................................
................................................................

Macie jakiś pomysł jak wyśledzić i ubić ten problem?

: 24 września 2009, 17:57
autor: I.L.O.
To wygląda tak jakby apache miał mnóstwo procesów, a powinien być tylko jeden.

: 24 września 2009, 18:40
autor: PiotrSz
Nie masz nic w logach (np. nie możność podłączenia gniazda)?

P.S. Apache nie działa na jednym procesie :)

: 24 września 2009, 22:59
autor: marecek
PiotrSz pisze:Nie masz nic w logach (np. nie możność podłączenia gniazda)?

P.S. Apache nie działa na jednym procesie :)
Fakt, Apache zawsze mi generuje tyle procesów, ile ustawię zmienną maxclients.

Czy możesz rozwinąć czym jest "nie możność podłączenia gniazda" ? (tzn. nie bardzo wiem co to są gniazda...).

: 25 września 2009, 08:11
autor: lessmian2
Możesz zamieścić jakieś logi?

: 25 września 2009, 09:21
autor: PiotrSz
Faktycznie wyraziłem się dość niejasno. Chodziło mi o coś w stylu "unable to connect socket"
Możesz sprawdzić jeszcze ruch tcpdump'em.

: 25 września 2009, 15:18
autor: fnmirk
PiotrSz, czym wersja angielska wypowiedzi różni się od polskiej?
PiotrSz pisze:nie możność podłączenia gniazda
PiotrSz pisze:unable to connect socket

: 28 września 2009, 12:08
autor: marecek
lessmian2 pisze:Możesz zamieścić jakieś logi?
Czy możesz powiedzieć, o które dzienniki konkretnie Ci chodzi? Przyglądałem się dość intensywnie dziennikom (apache, syslog, auth.log) i w momencie wystąpienia problemu nie dzieje się kompletnie nic nadzwyczajnego. Ot tak po prostu apache zaczyna zużywać po prostu najpierw 100% jednego, a później 100% drugiego rdzenia procesora.

Zaczynam się zastanawiać czy to nie ma przypadkiem podłoża sprzętowego...

: 28 września 2009, 12:21
autor: lessmian2
Miałem na myśli głownie logi Apache. Ale jeśli mówisz że nie ma w nich nic ciekawego, to cóż. Możesz jeszcze ustawić poziom logów na Debug, ale podejrzewam że zabije to serwer do końca (choć nie wiem czy da sie jeszcze bardziej). I sprawdź może netstatem ilość połączeń w czasie występowania problemu. Apache korzysta z modułu mpm_prefork czy jakiegoś innego?