2013-06-07 3 views
7

Похоже, у нас может быть (растущая) проблема памяти в нашем apache httpd где-то.apache httpd, используя mem mem, пока не наведет

Быстрый ПИК: http://screencast.com/t/NGAzarD87O

Обратите внимание, что это было отлично работает на оригинальном (физическом) сервер на некоторое время. Теперь на новой виртуальной машине (с большим объемом памяти и процессором) она работает, но медленно съедает память/своп, пока система не зависает.

Если я перезапущу httpd, mem скачет обратно (если мы его поймаем).

httpd.x86_64       2.2.3-76.el5_9   installed 
PHP 5.1.6 (cli) (built: Jun 22 2012 06:20:25) 
MySQL Server version: 5.0.95 

Я не думаю, что это может быть любой из сценариев, которые запускаются/и т.д., как они побежали штраф в течение многих лет на физическом компьютере. Мы попытались сопоставить все конфиги (http, php и т. Д.) На новой машине, но не можем понять, почему httpd продолжает расти.

$ ps -ylC httpd --sort:rss 
S UID PID PPID C PRI NI RSS SZ WCHAN TTY   TIME CMD 
S  0 13814  1 0 78 0 29208 68382 -  ?  00:00:00 httpd 
S 48 20854 13814 0 76 0 34876 70930 semtim ?  00:00:00 httpd 
S 48 20853 13814 0 75 0 36592 71387 semtim ?  00:00:00 httpd 
S 48 13822 13814 0 75 0 36780 71430 semtim ?  00:00:00 httpd 
S 48 20696 13814 0 75 0 37092 71520 semtim ?  00:00:00 httpd 
S 48 13821 13814 0 75 0 37184 71529 semtim ?  00:00:01 httpd 
S 48 13820 13814 0 75 0 37220 71527 -  ?  00:00:01 httpd 
S 48 13824 13814 0 75 0 37236 71513 semtim ?  00:00:01 httpd 
S 48 13818 13814 0 75 0 37636 71547 semtim ?  00:00:01 httpd 
S 48 13819 13814 0 75 0 37636 71617 semtim ?  00:00:01 httpd 
S 48 13823 13814 0 75 0 37888 71689 semtim ?  00:00:01 httpd 
S 48 13825 13814 0 75 0 37900 71676 semtim ?  00:00:01 httpd 

UPDATE: во время написания этого вопроса вне (возможно 10-15 минут) я перезапустил выше и RSS все сидит на ~ 51072 вместо выше на ~ 37000

Вот пробег из настроек MEM python program

Private + Shared = RAM used  Program 
.... SNIPPED OUT .... 
208.0 MiB + 25.5 MiB = 233.5 MiB  httpd (12) 
--------------------------------- 
         477.1 MiB 

PHP:

max_execution_time = 30 
max_input_time = 60 
memory_limit = 152M 

модули:

$ apachectl -M 
httpd: Could not reliably determine the server's fully qualified domain name, using 192.168.1.2 for ServerName 
Loaded Modules: 
core_module (static) 
mpm_prefork_module (static) 
http_module (static) 
so_module (static) 
auth_basic_module (shared) 
auth_digest_module (shared) 
authn_file_module (shared) 
authn_alias_module (shared) 
authn_anon_module (shared) 
authn_dbm_module (shared) 
authn_default_module (shared) 
authz_host_module (shared) 
authz_user_module (shared) 
authz_owner_module (shared) 
authz_groupfile_module (shared) 
authz_dbm_module (shared) 
authz_default_module (shared) 
ldap_module (shared) 
authnz_ldap_module (shared) 
include_module (shared) 
log_config_module (shared) 
logio_module (shared) 
env_module (shared) 
ext_filter_module (shared) 
mime_magic_module (shared) 
expires_module (shared) 
deflate_module (shared) 
headers_module (shared) 
usertrack_module (shared) 
setenvif_module (shared) 
mime_module (shared) 
dav_module (shared) 
status_module (shared) 
autoindex_module (shared) 
info_module (shared) 
dav_fs_module (shared) 
vhost_alias_module (shared) 
negotiation_module (shared) 
dir_module (shared) 
actions_module (shared) 
speling_module (shared) 
userdir_module (shared) 
alias_module (shared) 
rewrite_module (shared) 
proxy_module (shared) 
proxy_balancer_module (shared) 
proxy_ftp_module (shared) 
proxy_http_module (shared) 
proxy_connect_module (shared) 
cache_module (shared) 
suexec_module (shared) 
disk_cache_module (shared) 
file_cache_module (shared) 
mem_cache_module (shared) 
cgi_module (shared) 
version_module (shared) 
perl_module (shared) 
php5_module (shared) 
proxy_ajp_module (shared) 
python_module (shared) 
ssl_module (shared) 
Syntax OK 

настройки httpd.conf:

IfModule prefork.c> ignore format on these tags 
StartServers  8 
MinSpareServers 5 
MaxSpareServers 20 
ServerLimit  256 
MaxClients  256 
MaxRequestsPerChild 4000 

# worker MPM 
StartServers   2 
MaxClients   150 
MinSpareThreads  25 
MaxSpareThreads  75 
ThreadsPerChild  25 
MaxRequestsPerChild 0 

Использование программы в https://code.google.com/p/check-httpd-limits/wiki/Documentation я получил:

 
Check Apache Httpd MPM Config Limits (Version 2.4) 
by Jean-Sebastien Morisset - http://surniaulula.com/ 

Httpd Binary 

- CONFIG    : /etc/httpd/conf/httpd.conf 
- EXE     : /usr/sbin/httpd 
- MPM     : prefork 
- ROOT     : /etc/httpd 
- VERSION    : 2.2 

Httpd Processes 

- PID 10860 (httpd)  : 106.93 MB/ 3.95 MB shared 
- PID 13814 (httpd)  : 28.52 MB/ 6.36 MB shared [excluded from averages] 
- PID 13818 (httpd)  : 180.28 MB/ 4.29 MB shared 
- PID 13819 (httpd)  : 182.67 MB/ 4.04 MB shared 
- PID 13820 (httpd)  : 182.45 MB/ 4.08 MB shared 
- PID 13821 (httpd)  : 185.53 MB/ 4.04 MB shared 
- PID 13822 (httpd)  : 176.12 MB/ 4.36 MB shared 
- PID 13823 (httpd)  : 180.05 MB/ 4.04 MB shared 
- PID 13824 (httpd)  : 182.21 MB/ 4.05 MB shared 
- PID 13825 (httpd)  : 179.36 MB/ 4.04 MB shared 
- PID 20696 (httpd)  : 180.10 MB/ 4.04 MB shared 
- PID 20853 (httpd)  : 180.39 MB/ 4.03 MB shared 
- PID 20854 (httpd)  : 180.79 MB/ 4.04 MB shared 
- PID 21003 (httpd)  : 159.77 MB/ 4.05 MB shared 

- HttpdRealAvg   : 166.09 MB [excludes shared] 
- HttpdSharedAvg  : 4.05 MB 
- HttpdRealTot   : 2225.76 MB [excludes shared] 
- HttpdRunning   :  14 

Httpd Config 

- StartServers   : 8 
- ServerLimit   : 256 
- MinSpareServers  : 5 
- MaxSpareServers  : 20 
- MaxRequestsPerChild : 4000 
- MaxClients   : 256 

Server Memory 

- Cached    : 671.46 MB 
- MemFree    : 547.88 MB 
- MemTotal    : 3819.89 MB 
- SwapFree    : 5951.89 MB 
- SwapTotal    : 5951.99 MB 

Calculations Summary 

- OtherProcsMem   : 370.74 MB (MemTotal - Cached - MemFree - HttpdRealTot - HttpdSharedAvg) 
- FreeMemNoHttpd  : 3449.15 MB (MemFree + Cached + HttpdRealTot + HttpdSharedAvg) 
- MaxLimitHttpdMem  : 42523.09 MB (HttpdRealAvg * MaxClients + HttpdSharedAvg) 
- AllProcsTotalMem  : 42893.83 MB (OtherProcsMem + MaxLimitHttpdMem) 

Maximum Values for MemTotal (3819.89 MB) 

    
     StartServers    8 # (no change) Default is 5 
     ServerLimit    21 # (256 -> 21) MaxClients 
     MinSpareServers   5 # (no change) Default is 5 
     MaxSpareServers   20 # (no change) Default is 10 
     MaxRequestsPerChild  4000 # (no change) Default is 10000 
     MaxClients    21 # (256 -> 21) (MemFree + Cached + HttpdRealTot + HttpdSharedAvg)/HttpdRealAvg 
    

Result 

ERROR: AllProcsTotalMem (42893.83 MB) exceeds MemTotal (3819.89 MB) and free swap (5951.89 MB) by 33122.05 MB. 

+1

Не уверен, что это поможет, но вы можете попробовать отключить некоторые модули, которые вам не нужны. Они также потенциально опасны для безопасности. Например, вы действительно хотите автоматическую индексацию? –

+0

любые предложения о том, с чего начать? Опять же, это были те же самые модули, загруженные на старый сервер. Конечно, эта новая установка может сломать модули, я думаю. – Douglas

+0

То, что я сделал с моим сервером, было disbale modules, пока что-то не сломалось или apache не допустил ошибку при запуске. Если вы не хотите проходить через это, некоторые хорошие, которые нужно удалить, это autoindex, alias, proxy_ *, cgi, perl, php, python (если вы не используете этот язык). Кроме того, подтвердили ли вы, что ваш сервер не только активен? Настройте журналы доступа и проверьте журналы ошибок, если вы еще этого не сделали. –

ответ

1

Там может быть любое количество причин, Apache может принять слишком много памяти. Хотя нет универсального «ответа», есть список неисправностей:

  1. Переустановите Apache и все модули.
  2. Отключите все модули, которые вам не нужны. Помимо потенциального использования дополнительных ресурсов, это также может быть опасностью для безопасности.
    1. mod_autoindex разрешит любому пользователю просматривать все файлы в любом каталоге в каталоге public_html, если в этом каталоге нет индекса. *.
    2. mod_alias will не только покажет, что вы используете Apache, но также будет хорошим индикатором, который вы не удалили с помощью дополнительных модулей, и сделает вас более вероятной целью.
    3. Удалить все proxy modules, если вы на самом деле их не используете.
    4. Удалить все mod_cgi, mod_php и т. Д., Которые вам не нужны. Чем больше типов файлов вы разрешаете Apache, тем больше способов для злоумышленника быть злодейским.
  3. Проверьте свои server configurations.Не бойтесь исследовать, что делают определенные директивы, и не бойтесь создать резервную копию вашего apache.conf и изменить несколько вещей. Худший случай заключается в том, что Apache не запустится или произойдет сбой Apache.
1

Иногда выделение слишком большого объема памяти создает проблему с памятью. Если нет особых причин для выделения 152M для PHP, это очень важно. Снимите это до 32M или 64M. Если требуется конкретный скрипт, включите его только для этого скрипта.

Затем проверьте распределение базы данных. Часто память - это первое, что люди выделяют, чтобы сделать что-то быстрее, когда есть другие элементы, которые нужно сделать (например, настройка запроса).

По существу, слишком большое выделение создает резервную информацию для ввода-вывода. Звучит в обратном направлении, я знаю. У меня была аналогичная проблема, и это было связано с распределением ресурсов. Отбросьте свои ресурсы до значений по умолчанию и посмотрите, не изменит ли это вообще использование памяти. Настройтесь оттуда, чтобы найти лучшие настройки.

Смежные вопросы