Назад | Перейти на главную страницу

Необычно высокое использование памяти на CentOS VPS с 512 гарантированной оперативной памятью

Я работаю над веб-приложением среднего размера, написанным на PHP, которое работает на VPS с оперативной памятью 512 МБ. Веб-приложение еще не было официально запущено, поэтому трафика не так много, только я и еще несколько человек работают над ним.

На этой машине размещено еще одно веб-приложение немного меньшего размера, среди 4-5 других небольших статических сайтов.

Мы используем 32-разрядную версию Centos 5 и cPanel / WHM.

Это результат работы ps aux и, как видите, он не использует 100% ОЗУ. Однако в обзоре гиппанели он всегда отображается как использующий ОЗУ объемом 500 МБ, только для запуска apache, mysql и версий почтового сервера, ftp-сервера и т. Д. С минимальным объемом памяти.

-bash-3.2# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0   2156   664 ?        Ss   12:08   0:00 init [3]
root      1123  0.0  0.0   2260   548 ?        S<s  12:08   0:00 /sbin/udevd -d
root      1462  0.0  0.0   1812   568 ?        Ss   12:08   0:00 syslogd -m 0
named     1496  0.0  0.0   3808   820 ?        Ss   12:08   0:00 nsd
named     1497  0.0  0.0  10672   756 ?        S    12:08   0:00 nsd
named     1499  0.0  0.0   3880   584 ?        S    12:08   0:00 nsd
root      1514  0.0  0.1   7240  1064 ?        Ss   12:08   0:00 /usr/sbin/sshd
root      1522  0.0  0.0   2832   832 ?        Ss   12:08   0:00 xinetd -stayalive -pidfile /var/run/xinetd.pid
root      1534  0.0  0.1   3712  1328 ?        S    12:08   0:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql -
mysql     1667  0.0  2.9 225680 30884 ?        Sl   12:08   0:00 /usr/sbin/mysqld --basedir=/ --datadir=/var/lib/mysql -
mailnull  1766  0.0  0.1   9352  1100 ?        Ss   12:08   0:00 /usr/sbin/exim -bd -q60m
root      1797  0.0  0.0   2156   708 ?        Ss   12:08   0:00 /usr/sbin/dovecot
root      1798  0.0  0.0   2632  1012 ?        S    12:08   0:00 dovecot-auth
root      1816  0.0  3.0  38580 32456 ?        Ss   12:08   0:01 /usr/local/bin/spamd -d --allowed-ips=127.0.0.1 --pidfi
root      1839  0.0  1.6  63200 17496 ?        Ss   12:08   0:00 /usr/local/apache/bin/httpd -k start -DSSL
root      1846  0.0  0.1   5416  1468 ?        Ss   12:08   0:00 pure-ftpd (SERVER)
root      1848  0.0  0.1   6212  1244 ?        S    12:08   0:00 /usr/sbin/pure-authd -s /var/run/ftpd.sock -r /usr/sbin
root      1856  0.0  0.1   4492  1112 ?        Ss   12:08   0:00 crond
root      1864  0.0  0.0   2356   428 ?        Ss   12:08   0:00 /usr/sbin/atd
dovecot   1927  0.0  0.1   5196  1952 ?        S    12:08   0:00 pop3-login
dovecot   1928  0.0  0.1   5196  1948 ?        S    12:08   0:00 pop3-login
dovecot   1929  0.0  0.1   5316  2012 ?        S    12:08   0:00 imap-login
dovecot   1930  0.0  0.2   5416  2228 ?        S    12:08   0:00 imap-login
root      1939  0.0  0.1   3936  1964 ?        S    12:08   0:00 cPhulkd - processor
root      1963  0.0  0.8  15876  8564 ?        S    12:08   0:00 cpsrvd (SSL) - waiting for connections
root      1966  0.0  0.7  15172  7748 ?        S    12:08   0:00 cpdavd - accepting connections on 2077 and 2078
root      1990  0.0  0.2   5008  3136 ?        S    12:08   0:00 queueprocd - wait to process a task
root      2017  0.0  2.9  38580 31020 ?        S    12:08   0:00 spamd child
root      2018  0.0  0.5   8904  5636 ?        S    12:08   0:00 /usr/bin/perl /usr/local/cpanel/bin/leechprotect
nobody    2021  0.0  3.2  66512 33724 ?        S    12:08   0:00 /usr/local/apache/bin/httpd -k start -DSSL
nobody    2022  0.0  3.1  67812 33024 ?        S    12:08   0:00 /usr/local/apache/bin/httpd -k start -DSSL
nobody    2024  0.0  1.9  64364 20680 ?        S    12:08   0:00 /usr/local/apache/bin/httpd -k start -DSSL
root      2027  0.0  0.4   9000  4540 ?        S    12:08   0:00 tailwatchd
root      2032  0.0  0.1   4176  1836 ?        SN   12:08   0:00 cpanellogd - sleeping for logs
nobody    3096  0.0  1.9  64572 20264 ?        S    12:09   0:00 /usr/local/apache/bin/httpd -k start -DSSL
nobody    3097  0.0  2.8  66008 30136 ?        S    12:09   0:00 /usr/local/apache/bin/httpd -k start -DSSL
nobody    3098  0.0  2.8  65704 29752 ?        S    12:09   0:00 /usr/local/apache/bin/httpd -k start -DSSL
nobody    3099  0.0  3.1  67260 32816 ?        S    12:09   0:00 /usr/local/apache/bin/httpd -k start -DSSL
andrei    3448  0.0  0.1   3204  1632 ?        S    12:50   0:00 imap
nobody    3537  0.0  1.9  64308 20108 ?        S    13:01   0:00 /usr/local/apache/bin/httpd -k start -DSSL
nobody    3614  0.0  1.9  64576 20628 ?        S    13:10   0:00 /usr/local/apache/bin/httpd -k start -DSSL
nobody    3615  0.0  1.3  63200 14672 ?        S    13:10   0:00 /usr/local/apache/bin/httpd -k start -DSSL
root      3626  0.0  0.2  10232  2964 ?        Rs   13:14   0:00 sshd: root@pts/0
root      3648  0.0  0.1   3844  1600 pts/0    Ss   13:14   0:00 -bash
root      3826  0.0  0.0   2532   908 pts/0    R+   13:21   0:00 ps aux

В последнее время, без каких-либо существенных изменений конфигурации, использование памяти начало достигать пика и превысить 512, в результате чего виртуальный сервер убивал apache, в основном убивая наш сайт в процессе.

Вот результат free -m:

-bash-3.2# free -m
             total       used       free     shared    buffers     cached
Mem:          1024        381        642          0          0          0
-/+ buffers/cache:        381        642
Swap:            0          0          0

Другое примечание:

Кажется, что Apache убивается, когда использование достигает 400/512 МБ оперативной памяти. Раньше такого не было. Это довольно странно.

Вы хоть представляете, нормально ли это и нужно ли больше ресурсов? Я так не думаю, потому что в сети еще не так много данных или трафика.

Изменить 2:

[Sat Apr 07 18:04:21 2012] [notice] Graceful restart requested, doing restart
[Sat Apr 07 18:04:22 2012] [notice] seg fault or similar nasty error detected in the parent process
(after manual restart)
[Sat Apr 07 18:28:51 2012] [notice] suEXEC mechanism enabled (wrapper: /usr/local/apache/bin/suexec)
etc.

Вот журнал одного из сбоев Apache. Это сбивает с толку.

Журнал apache показывает плавный перезапуск, который может быть связан с ротацией журналов: одно и то же время каждый день?

Затем этот перезапуск приводит к ошибке сегментации или аналогичной проблеме, которая может быть связана с несоответствием библиотеки. Был ли PHP установлен независимо от apache? Эта проблема началась только после обновления cpanel (которое могло привести к обновлению той или иной библиотеки)?

Попробуйте остановить и запустить apache: всегда ли возникает эта ошибка? Что делать, если вы отключите php или другие модули?

Вам следует подумать о том, чтобы сделать это новым вопросом, если он не связан с использованием памяти, о котором вы впервые спросили.

free -m показывает, что свободной оперативной памяти должно быть достаточно. Когда процесс завершается из-за слишком малого объема доступной оперативной памяти, это называется «oom kill» m, где «oom» означает оут ож мЭмори.

Вы даже можете указать Linux, какие процессы нужно остановить, в каком порядке возникает такая ситуация.

Кроме того, MySQL резервирует много оперативной памяти в нашей системе, что нормально. Вы можете уменьшить значение, отредактировав файл my.cnf и настроив различные переменные конфигурационного файла MySQL.

Кроме того, вам следует приложить некоторые усилия для оптимизации Apache, чтобы снизить потребление оперативной памяти. От вашего PHP-приложения сильно зависит, потребляют ли Apache и PHP много оперативной памяти или нет.

Кроме того, вы должны создать файл SWAP, который поможет вам в случае переполнения памяти.