netstat -pn | grep httpd | wc -l
Запускал с интервалом в 5 секунд:
63 66 69 68 44 47 79 70 48 57 64 71 65 46 58
То есть видно, что больше 70 процессов пока не поднимается
А MaxRequestsPerChild = 0 не слишком уж жестко?
Переключил на этот недосервер еще пару сайтов, сейчас по соединениям
netstat -pn | awk '/^tcp/ { print $6 }' | sort | uniq -c
60 CLOSE
6 CLOSE_WAIT
1 CLOSING
605 ESTABLISHED
15 FIN_WAIT1
43 FIN_WAIT2
11 LAST_ACK
11 SYN_RECV
1 SYN_SENT
3806 TIME_WAIT
Current Time: Thursday, 04-Feb-2010 10:47:10 CETRestart Time: Thursday, 04-Feb-2010 10:44:39 CETParent Server Generation: 0Server uptime: 2 minutes 30 secondsTotal accesses: 6513 - Total Traffic: 50.2 MBCPU Usage: u82.92 s4.3 cu0 cs0 - 58.1% CPU load43.4 requests/sec - 342.9 kB/second - 7.9 kB/request71 requests currently being processed, 2 idle workersW_WWW.WWWWWWWWWWWWWW.WWCWWWWWWWWWW_.WW.WW..W.....W..W....W..W..C...W.W..W.WW.WWW.W.WW....WW.WWW..WW.W..WWW..WWW..W..WW.WW.......................................................................................................................................................................................................................................................................................................................................................................................................
Сейчас
MaxClients 100
MaxRequestsPerChild 1024
34 CLOSE
12 CLOSE_WAIT
489 ESTABLISHED
13 FIN_WAIT1
21 FIN_WAIT2
15 LAST_ACK
4 SYN_RECV
3 SYN_SENT
4955 TIME_WAIT
Конфиг nginx вменяемый? Может чего еще подправить?
Да и еще, есть ли путь как сделать процессы апача менее тяжелыми?
Сейчас в среднем VIRT = 222м RES = 12 м
Proxoma добавил 04.02.2010 в 12:20
Обществу я уже сообщал сколько оперативной памяти:
Mem: 10485760k total, 327192k used, 10158568k free, 0k buffers
221m 11m 3380 S 1 0.1 0:00.02 httpd
[root@vs251030 nginx]# cat /proc/meminfo
MemTotal: 10485760 kB
MemFree: 10196444 kB
Buffers: 0 kB
Cached: 0 kB
SwapCached: 0 kB
Active: 0 kB
Inactive: 0 kB
HighTotal: 0 kB
HighFree: 0 kB
LowTotal: 10485760 kB
LowFree: 10196444 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 0 kB
Writeback: 0 kB
Mapped: 0 kB
Slab: 0 kB
CommitLimit: 0 kB
Committed_AS: 0 kB
PageTables: 0 kB
VmallocTotal: 0 kB
VmallocUsed: 0 kB
VmallocChunk: 0 kB
nginx только что поставил как проксирующий фронтэнд.
Стало _чуть-чуть_ повеселее, но картина мира выглядит вот так:
66 requests currently being processed, 0 idle workers
WWWWWWWWWW.WWWWWWWWWWWWWWWW.WWWWWWWWW.WWWWWWWWWW.WWWWWWWWW.W....
.WW.............W..W.WWWW....WWW................................
................................................................
Proxoma добавил 04.02.2010 в 12:23
Конфиг nginx в моем случае
#user nobody; worker_processes 4; worker_rlimit_nofile 8192; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] $request ' '"$status" $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; tcp_nopush on; # keepalive_timeout 0; keepalive_timeout 65; #gzip on; proxy_connect_timeout 75s; client_header_timeout 3m; client_body_timeout 3m; send_timeout 3m; connection_pool_size 256; client_header_buffer_size 4k; large_client_header_buffers 4 32k; request_pool_size 4k; output_buffers 4 32k; postpone_output 1460; server { listen XXXXXXX:80 default; location / { proxy_pass http://XXXX:81; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 300m; client_body_buffer_size 128k; proxy_connect_timeout 900; proxy_send_timeout 900; proxy_read_timeout 900; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 10m; } }
Апачи прежде чем клиенту запихать ответ его еще сами формируют, причем это тоже существенное время. И изменить его нельзя.
Всегда ли для апача верно условие
1 соединение = 1 процесс httpd?
Нельзя ли сервить одним процессом множество соединений?
Тут проблема в том, что типа памяти и процессора в принципе много, но идиотские лимиты
numproc 152 180 1200
kmemsize 73558998 87681326 87662592
Не дают запускать множество процессов апача.
Не особо понятно, почему VPS-ка упирается в kmemsize, при этом вагон якобы свободной памяти...
Так чего делать-то?
Мне вот чего еще непонятно:
По top или cat /proc/meminfo видно, что памяти свободной много:
Mem: 10485760k total, 601472k used, 10184288k free, 0k buffers
По top как только доходит до ~620 - начинаются эти вот ошибки с аллокацией памяти.
и тут же видны превышения лимита kmemsize по /proc/user_beancounters
Как-то это между собой коррелирует?
Proxoma добавил 03.02.2010 в 18:47
myhand,
На сервер ломятся юзеры именно в таком количестве.
Как я сказал, на "железном" сервере с 2 (!) Гб памяти те же сайты работают в той же конфигурации.
Тут какие-то VDS-ные заморочки вылезли.
У меня так оно и есть:
<IfModule prefork.c>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
ServerLimit 512
MaxClients 512
MaxRequestsPerChild 64
</IfModule>
Я так понимаю, что на каждое соединение появляется процесс httpd?
Самое интересное, что вся эта конфигурация работает на выделенном сервере с 2 гб памяти и всего хватает. Сайты те же, настройки те же.
А тут вот решил на VPS переползти.
Количество одновременных подключений к серверу может достигать 500. Страницы-чистый php. Не знаю, поможет ли тут nginx
Proxoma добавил 03.02.2010 в 18:35
madoff
а что вы имеете в виду, что конфиуграция не соответствует выводу ps?
Разве если указано
то процессов должно быть сколько?