![Истекло время ожидания соединения с Apache. В чем может быть проблема?](https://rvso.com/image/697408/%D0%98%D1%81%D1%82%D0%B5%D0%BA%D0%BB%D0%BE%20%D0%B2%D1%80%D0%B5%D0%BC%D1%8F%20%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F%20%D1%81%D0%BE%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F%20%D1%81%20Apache.%20%D0%92%20%D1%87%D0%B5%D0%BC%20%D0%BC%D0%BE%D0%B6%D0%B5%D1%82%20%D0%B1%D1%8B%D1%82%D1%8C%20%D0%BF%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D0%B0%3F.png)
У меня есть сервер Apache, который очень нестабилен, и много раз в день я пытаюсь подключиться к Apache. Я не могу понять, почему, так как для меня все, кажется, в порядке. На сервере всегда "много" свободных ресурсов. Сервер - Linode 4098 с 4 ГБ оперативной памяти, 48 ГБ жесткого диска и 2 процессорами.
я используюmod_statusдля проверки статуса Apache, но я продолжаю получать ошибки времени ожидания соединения при попытке доступа к странице /server-status.
Моя текущая конфигурация Apache
<IfModule mpm_prefork_module>
StartServers 3
ServerLimit 200
MinSpareServers 3
MaxSpareServers 5
MaxRequestWorkers 175
MaxConnectionsPerChild 100
MaxRequestsPerChild 20
</IfModule>
Почти каждый второй запрос Apache к /server-status завершается ошибкой ERR_CONNECTION_TIMED_OUT.
Я не могу понять, почему это происходит, ведь когда я проверяю сервер, там много доступных ресурсов и неактивных соединений.
Например, /server-status сообщает о множестве доступных подключений:
Parent Server Config. Generation: 1
Parent Server MPM Generation: 0
Server uptime: 1 hour 6 minutes 6 seconds
Server load: 0.09 0.15 0.14
Total accesses: 27206 - Total Traffic: 79.8 MB
CPU Usage: u3.92 s.77 cu0 cs0 - .118% CPU load
6.86 requests/sec - 20.6 kB/second - 3077 B/request
52 requests currently being processed, 1 idle workers
RRRCRRRRRRRRRRRRRRRRRRCRRC.RR.R.RRRRRRRRRCRRRRR_WCCRR.R..RR.....
................................................................
...............................................
А с учетом времени безотказной работы я вижу, что процессор также доступен.
load average: 0.05, 0.12, 0.14
и есть доступная память:
total used free shared buff/cache available
> Mem: 3.9G 1.3G 413M 81M 2.1G 2.3G
Есть ли у кого-нибудь идеи, в чем может быть проблема?
ОБНОВЛЕНИЕ: По запросу привожу фрагмент журнала доступа. (99% — это запросы, касающиеся отслеживания статистики путем вызова скрипта-обработчика /api2/counting/count)
4.139.128.194 - - [23/Jan/2017:11:38:36 +0000] "POST /api2/counter/count?r=1485171514298 HTTP/1.1" 200 441 "-" "WriteDiary4.72"
176.38.149.76 - - [23/Jan/2017:11:38:36 +0000] "POST /api2/counter/count?r=1485171517077 HTTP/1.1" 200 454 "-" "WriteDiary4.72"
67.84.227.131 - - [23/Jan/2017:11:38:36 +0000] "GET /keepalive?471:1485171524866 HTTP/1.1" 200 469 "https://www.writediary.com/notes" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393"
122.178.156.252 - - [23/Jan/2017:11:38:36 +0000] "POST /api2/counter/count?r=1485171515804 HTTP/1.1" 200 441 "-" "WriteDiary4.72"
82.137.13.18 - - [23/Jan/2017:11:38:37 +0000] "POST /api2/counter/count?r=1485171525558 HTTP/1.1" 200 441 "-" "WriteDiary4.72"
103.199.35.221 - - [23/Jan/2017:11:38:37 +0000] "POST /api2/counter/count?r=1485171515470 HTTP/1.1" 200 441 "-" "WriteDiary4.72"
95.218.142.245 - - [23/Jan/2017:11:38:37 +0000] "POST /api2/counter/count?r=1485171516264 HTTP/1.1" 200 441 "-" "WriteDiary4.72"
47.31.143.106 - - [23/Jan/2017:11:38:37 +0000] "POST /api2/counter/count?r=1485171515787 HTTP/1.1" 200 441 "-" "WriteDiary4.72"
94.139.128.194 - - [23/Jan/2017:11:38:37 +0000] "POST /api2/counter/count?r=1485171515619 HTTP/1.1" 200 441 "-" "WriteDiary4.72"
120.188.33.198 - - [23/Jan/2017:11:38:37 +0000] "POST /api2/counter/count?r=1485171515867 HTTP/1.1" 200 454 "-" "WriteDiary4.72"
47.29.174.163 - - [23/Jan/2017:11:38:37 +0000] "POST /api2/counter/count?r=1485171515122 HTTP/1.1" 200 441 "-" "WriteDiary4.72"
85.115.224.151 - - [23/Jan/2017:11:38:37 +0000] "POST /api2/counter/count?r=1485171515453 HTTP/1.1" 200 441 "-" "WriteDiary4.72"
47.11.219.147 - - [23/Jan/2017:11:38:37 +0000] "POST /api2/counter/count?r=1485171516596 HTTP/1.1" 200 441 "-" "WriteDiary4.72"
61.5.53.52 - - [23/Jan/2017:11:38:37 +0000] "POST /api2/counter/count?r=1485171520665 HTTP/1.1" 200 441 "-" "WriteDiary4.72"
116.102.205.20 - - [23/Jan/2017:11:38:37 +0000] "POST /api2/counter/count?r=1485171516590 HTTP/1.1" 200 454 "-" "WriteDiary4.72"
101.60.31.133 - - [23/Jan/2017:11:38:37 +0000] "POST /api2/counter/count?r=1485171516802 HTTP/1.1" 200 441 "-" "WriteDiary4.72"
47.31.147.213 - - [23/Jan/2017:11:38:37 +0000] "POST /api2/counter/count?r=1485171515431 HTTP/1.1" 200 5131 "-" "WriteDiary4.72"
186.78.73.222 - - [23/Jan/2017:11:38:37 +0000] "POST /api2/counter/count?r=1485171669305 HTTP/1.1" 200 454 "-" "WriteDiary4.72"
112.79.186.36 - - [23/Jan/2017:11:38:38 +0000] "POST /api2/counter/count?r=1485171736857 HTTP/1.1" 200 454 "-" "WriteDiary4.72"
94.139.128.194 - - [23/Jan/2017:11:38:38 +0000] "POST /api2/counter/count?r=1485171516605 HTTP/1.1" 200 441 "-" "WriteDiary4.72"
24.236.88.161 - - [23/Jan/2017:11:38:38 +0000] "POST /api2/counter/count?r=1485171516752 HTTP/1.1" 200 441 "-" "WriteDiary4.72"
150.31.100.192 - - [23/Jan/2017:11:38:38 +0000] "POST /api2/counter/count?r=1485171517315 HTTP/1.1" 200 454 "-" "WriteDiary4.72"
12.181.196.67 - - [23/Jan/2017:11:38:38 +0000] "GET /keepalive?50412:1485171517975 HTTP/1.1" 200 501 "https://www.writediary.com/notes" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"
112.198.75.139 - - [23/Jan/2017:11:38:38 +0000] "POST /api2/counter/count?r=1485171408169 HTTP/1.1" 200 4794 "-" "WriteDiary4.72"
114.125.201.114 - - [23/Jan/2017:11:38:38 +0000] "POST /api2/counter/count?r=1485172944904 HTTP/1.1" 200 441 "-" "WriteDiary4.72"
РЕШЕНИЕ: Мне пришлось обновить сервер, чтобы разрешить больше рабочих. Поскольку каждое соединение Apache требует около 30 МБ оперативной памяти, сервер превысил лимит. 4 ГБ оперативной памяти дают = 4000 МБ / 30 МБ = 133 соединения максимум... и когда часть памяти выделяется для mysql и других системных функций, на практике доступно только 3,5 ГБ, что дает максимум около 100 соединений.
При обновлении до 8 ГБ ОЗУ максимальный лимит приближается к 250 соединениям, что делает все плавным. Фактически, после изменения ОЗУ, server-status сообщил, что 200 запросов одновременно обрабатывались Apache в течение многих часов в пиковое время. Это объясняет, почему сервер боролся в пиковое время с лимитом, близким к 100..
решение1
можете ли вы опубликовать журнал доступа Apache?
Если вы используете Ubuntu, вы можете найти логи, используя эту команду
cat /var/log/apache2/access.log
но это зависит от вашей платформы