Drupal жрет память

Главные вкладки

Аватар пользователя darkdim darkdim 20 января 2011 в 18:01

Доброго времени суток!
извините что к Вам обращаюсь, есть много похожих тем но... одним словом Drupal, большой и прожорливый Drupal. Жрет память. С чем это может быть связано? Ума не приложу.
Буду благодарен любому дельному совету.
Ниже исходные данные

FreeBSD 8.1-RELEASE amd64

# apachectl -v
Server version: Apache/2.2.17 (FreeBSD)
Server built: Jan 19 2011 14:26:11
worker-mpm

MySQL 5.5.8

# nginx -v
nginx version: nginx/0.8.54

в апаче

StartServers 4
MaxClients 600
MinSpareThreads 30
MaxSpareThreads 500
ThreadsPerChild 50
MaxRequestsPerChild 10000
ServerLimit 500

last pid: 62623; load averages: 0.28, 0.32, 0.38 up 0+16:37:11 15:19:55
288 processes: 1 running, 287 sleeping
CPU: 3.1% user, 0.0% nice, 0.7% system, 0.2% interrupt, 96.1% idle
Mem: 699M Active, 1427M Inact, 968M Wired, 81M Cache, 827M Buf, 4731M Free
Swap: 8192M Total, 8192M Free

PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND
62569 www 52 44 0 789M 523M accept 1 3:41 12.35% httpd
62570 www 52 44 0 739M 473M accept 1 3:03 3.91% httpd
43094 mysql 24 44 0 2730M 362M ucond 2 2:47 0.00% mysqld
61862 www 1 44 0 27296K 6348K kqread 1 0:25 0.00% nginx
61860 www 1 44 0 27296K 6500K kqread 2 0:22 0.00% nginx
61861 www 1 44 0 27296K 6024K kqread 0 0:17 0.00% nginx
43104 nobody 6 76 0 58876K 31764K ucond 2 0:02 0.00% memcached
62491 root 1 44 0 402M 22976K select 0 0:01 0.00% httpd
55811 ******* 1 44 0 38104K 4028K select 2 0:01 0.00% sshd

юзаеться арс для опкод кеширования
версия 3.0.19
весь софт из портов
PHP Version 5.2.17

CPU: Intel(R) Core(TM)2 Quad CPU Q8400 @ 2.66GHz (2666.63-MHz K8-class CPU)
real memory = 8589934592 (8192 MB)

Комментарии

Аватар пользователя Trimbombom Trimbombom 20 января 2011 в 19:55

http://liberatum.ru/forum/podkhodit-li-drupal-dlya-internet-magazina - в этой теме, довольно короткой, есть несколько постов по этому вопросу. Автор подробно не излагает, но, если Вы попробуете связаться с ним посредством личных сообщений или другим способом, может он Вам подскажет, в какую сторону двигаться, ибо сам он уже этот вопрос решил.

Либо можно спросить непосредственно в той теме.

Как я понимаю, он - админ того сайта (liberatum.ru).

Желаю удачи.

Аватар пользователя darkdim darkdim 20 января 2011 в 20:41

"Softovick" wrote:
Чета я не вижу, где именно Drupal там "жрет" память?

хостеры сетуют на то, что процессы апача по 400-500М вместо 20М и память не полностью потом чистится, что приводит со временем к печальным последствиям.
цитирую буквально:
"каждый процес апача должен жрать ну 20мб максимум...
а тут по 400 по 500"

Аватар пользователя darkdim darkdim 21 января 2011 в 20:56

Softovick wrote:
Ну так это скорее всего либо кривой модуль, написанный криво. Либо просто недонастроенный WEB-сервер.

а есть список модулей на drupal.org, замеченных в кривизне? время от времени провожу ревизию, и потихоньку избавляюсь от излишнего функционала, но подозревать кривой или нет, фактически можно любой модуль.

второй момент, программируя на пхп, до знакомства с drupal, вообще не слышал про утечки памяти. Нет, ну понятно, что код как и у всех поначалу)), потом набираешься опыта, перенимаешь какие-то правила и т.д. Но сам подход пхп - не зависеть от платформы... открыл, прочитал, закрыл - все(утрирую). Пхп это же не Си, где выделяешь память, потом освобождаешь. пхп-шнику не пофиг, какой механизм освобождает память? ну не закрыл соединение, ну и фиг с ним, по таймауту сбросится, накосячил с циклом, глянул ошибки, исправил, но тут капец, все работает, в логах чисто, а память "течет". Так может и паранойя появиться от http://drupal.org/project/modules))

Аватар пользователя darkdim darkdim 20 января 2011 в 21:05

"Softovick" wrote:
либо кривой модуль, написанный криво

модуль Drupal? как его определить?

"Softovick" wrote:
недонастроенный WEB-сервер

в какую сторону его донастроить?

Аватар пользователя Siegfrid@drupal.org Siegfrid@drupal.org 20 января 2011 в 22:58

Кстати, очень похоже, что у вас php сконфигурирован как cgi, лучше перекомпилить его как модуль к apache.

А что это у вас за звездолет такой? для каких целей, если не секрет?

Аватар пользователя Siegfrid@drupal.org Siegfrid@drupal.org 20 января 2011 в 23:03

MaxRequestsPerChild 10000 - можно попробовать чутка уменьшить, например до 5000 ну и вот эти цифры реально смущают:
MinSpareThreads 30
MaxSpareThreads 500

если даже взять по 500 * 20M - то получится 10ть гигов оперативы, а у вас ее явно меньше...

Аватар пользователя rbogdan@drupal.org rbogdan@drupal.org 20 января 2011 в 23:26

"<a href="mailto:Siegfrid@drupal.org">Siegfrid@drupal.org</a>" wrote:
поставьте eaccelerator и вопросы будут решены.

ТС написал, что использует APC. Так что вопрос не будет решён заменой APC на eaccelerator.

А вот что действительно может помочь это установка модуля Devel что бы узнать сколько памяти кушает друпал и потом уже с помощью какого-нить дебагера, например Xdebug проверить где именно происходят такие траты памяти.

Аватар пользователя Siegfrid@drupal.org Siegfrid@drupal.org 20 января 2011 в 23:29

про APC проглядел :), но вот не уверен, что devel поможет на шару. даже если он и покажет, что drupal жрет, то и что толку, он ведь не скажет кто виноват...

Аватар пользователя darkdim darkdim 20 января 2011 в 23:34

Options for php52 5.2.17 ¦
¦ -----------------------------------------------------------------¬ ¦
¦ ¦[X] CLI Build CLI version ¦ ¦
¦ ¦[X] CGI Build CGI version ¦ ¦
¦ ¦[X] APACHE Build Apache module ¦ ¦
¦ ¦[ ] DEBUG Enable debug ¦ ¦
¦ ¦[X] SUHOSIN Enable Suhosin protection system (not for jails) ¦ ¦
¦ ¦[ ] MULTIBYTE Enable zend multibyte support ¦ ¦
¦ ¦[ ] IPV6 Enable ipv6 support ¦ ¦
¦ ¦[ ] MAILHEAD Enable mail header patch ¦ ¦
¦ ¦[X] REDIRECT Enable force-cgi-redirect support (CGI only) ¦ ¦
¦ ¦[X] DISCARD Enable discard-path support (CGI only) ¦ ¦
¦ ¦[X] FASTCGI Enable fastcgi support (CGI only) ¦ ¦
¦ ¦[X] FPM Enable fastcgi process manager (CGI only) ¦ ¦
¦ ¦[X] PATHINFO Enable path-info-check support (CGI only)

отак собран пхп

конф воркера теперь такой

StartServers 4
MaxClients 600
MinSpareThreads 30
MaxSpareThreads 250
ThreadsPerChild 50
MaxRequestsPerChild 5000
ServerLimit 500

last pid: 1955; load averages: 0.22, 0.21, 0.17 up 0+01:03:29 22:15:01
269 processes: 1 running, 268 sleeping
CPU: 4.9% user, 0.0% nice, 2.3% system, 0.2% interrupt, 92.6% idle
Mem: 360M Active, 521M Inact, 687M Wired, 400K Cache, 741M Buf, 6339M Free
Swap: 8192M Total, 8192M Free

PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND
1852 www 52 44 0 648M 358M accept 2 0:32 5.13% httpd
1851 www 52 44 0 534M 243M accept 2 0:10 4.49% httpd
1518 mysql 23 44 0 2653M 196M ucond 2 1:02 0.00% mysqld
1849 www 52 76 0 404M 127M accept 3 0:05 0.00% httpd
1060 www 1 44 0 25248K 7076K kqread 2 0:04 0.00% nginx
1058 www 1 44 0 27296K 7252K kqread 1 0:03 0.00% nginx
1059 www 1 44 0 25248K 6940K kqread 0 0:02 0.00% nginx
1850 www 52 76 0 398M 99M accept 0 0:01 0.00% httpd
1660 ******* 1 44 0 38104K 5248K select 1 0:00 0.00% sshd
1848 root 1 44 0 365M 25008K select 2 0:00 0.00% httpd

127 коннектов

Аватар пользователя Siegfrid@drupal.org Siegfrid@drupal.org 20 января 2011 в 23:44

я конечно не эксперт по установке php, но тут чувствуется, что он сконфигурирован как CGI, а не расширение к apache.

честно говоря я не работал с FreeBSD, поэтому у меня нет мануала, как поставить php как модуль к апачу, советую погуглить на эти ключевым словам - install on FreeBSD php-mod apache

Аватар пользователя igor701 igor701 21 января 2011 в 0:09

вывод phpinfo можете показать?
и /server-status у апача

и кстати, а зачем так много процессов апачевских?
у вас вся статика и неавторизованные должны идти через ngnix

P.S. и кстати, да, я в своё время пересобирал apache на FreeBSD именно для этого (чтобы не CGI был, а mod_). Я забыл, кстати, вставить FreeType Support, вы не забудьте Smile

Аватар пользователя UnnamedNETUA UnnamedNETUA 21 января 2011 в 0:22

Да тут 2 процесса с 10 детьми должно хватить мне кажется (если apache за nginx спрятать)

UPD. 2-3 процесса на сайте достаточно.

Аватар пользователя darkdim darkdim 21 января 2011 в 10:14

UnnamedNETUA wrote:
Да тут 2 процесса с 10 детьми должно хватить мне кажется (если apache за nginx спрятать)

UPD. 2-3 процесса на сайте достаточно.


nginx используется в качестве реверсного проксирования

Аватар пользователя Siegfrid@drupal.org Siegfrid@drupal.org 21 января 2011 в 1:39

как пересоберете php и перезапустите апач, снимите показания и в студию их. Мы коллоквиум устроим (эко я после интернов мысли излагать забавно стал Lol

Аватар пользователя Siegfrid@drupal.org Siegfrid@drupal.org 21 января 2011 в 22:10

не там копаете. оптимизируйте свой сервер. я когда начал потихоньку разбираться с оптимизацией реально ощутил пользу даже от того, что просто перешел с MyISAM на InnoDB!

Аватар пользователя Виктор Степаньков ака RxB Виктор Степаньк... 22 января 2011 в 0:36

Всегда виноват друпал!
Стандартые конфиги VPS пишутся святыми.

Так же, иногда такие конфиги страчать приходится, что волосы на жопе шевелиться начинают.

Попался на днях в руки сервант, на серванте тяжёлый сайт с 1500 просмотрами, но рамы катастрофически не хватает.
Что сделал первым делом оптимизатор?
Он увеличил кеш запросов до 512 мегабайт, сказал что для посещаемого сайта стоявшие 128 метров слишком мало.
Оперативы стало ещё меньше, падать стало чаще. Я сказал что на fermer.ru вообще 64 метра и как-то держит 150 000 просмотров по LI, оптимизатор так и не ответил...

Аватар пользователя v1adimir@drupal.org v1adimir@drupal.org 22 января 2011 в 20:26

<a href="mailto:Siegfrid@drupal.org">Siegfrid@drupal.org</a> wrote:
PHP 5.3.5 - не катит для drupal 6, у него требование к php быть не выше 5.2.х

последняя версия ядра 6-ки катит. а вот с модулями могут быть проблемы. а могут и не быть.

Аватар пользователя Siegfrid@drupal.org Siegfrid@drupal.org 22 января 2011 в 20:23

ну и для пятерки тоже самое, для семерки такого ограничения нет. шестерка сама по себе тоже сейчас поддерживает 5.3.х, но вот дополнительные модули не все, могут быть проблемы, так что если вы пользуете 6ку или 5ку, то откатитесь к php 5.2.х

Аватар пользователя darkdim darkdim 22 января 2011 в 20:44

<a href="mailto:Siegfrid@drupal.org">Siegfrid@drupal.org</a> wrote:
ну и для пятерки тоже самое, для семерки такого ограничения нет. шестерка сама по себе тоже сейчас поддерживает 5.3.х, но вот дополнительные модули не все, могут быть проблемы, так что если вы пользуете 6ку или 5ку, то откатитесь к php 5.2.х

тестируем...

PS траблы были пока только с swftools но вовремя попался нужный патч

Аватар пользователя v1adimir@drupal.org v1adimir@drupal.org 22 января 2011 в 20:28

и вообще мне кажется, что вот эти параметры чересчур задраны

Quote:
StartServers 4
MaxClients 600
MinSpareThreads 30
MaxSpareThreads 250
ThreadsPerChild 50
MaxRequestsPerChild 5000
ServerLimit 500

по-моему, здесь всего слишком много

Аватар пользователя igor1970 igor1970 22 января 2011 в 21:07

"RxB" wrote:
Попался на днях в руки сервант, на серванте тяжёлый сайт с 1500 просмотрами, но рамы катастрофически не хватает.
Что сделал первым делом оптимизатор?
Он увеличил кеш запросов до 512 мегабайт, сказал что для посещаемого сайта стоявшие 128 метров слишком мало.
Оперативы стало ещё меньше, падать стало чаще. Я сказал что на fermer.ru вообще 64 метра и как-то держит 150 000 просмотров по LI, оптимизатор так и не ответил...

512 МБ изврат, но 64 МБ явно мало. Увеличение query_cache и table_cache с одновременным уменьшением max_heap_table и tmp_table позволяет остановить рост временных таблиц и получить qcache_lowmem_prunes=0.
"darkdim" wrote:
MaxClients 600

Не перебор?

Аватар пользователя Siegfrid@drupal.org Siegfrid@drupal.org 22 января 2011 в 22:42

Вот такое вот счастье у меня на VPS
top - 19:38:34 up 20 min, 1 user, load average: 0.07, 0.02, 0.00
Tasks: 127 total, 1 running, 126 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1029508k total, 462660k used, 566848k free, 16956k buffers
Swap: 524280k total, 0k used, 524280k free, 172484k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2353 mysql 20 0 514m 114m 6288 S 0 11.4 0:03.45 mysqld
5210 www-data 20 0 91912 44m 28m S 0 4.4 0:02.50 apache2
5211 www-data 20 0 94328 38m 20m S 0 3.8 0:00.98 apache2
5212 www-data 20 0 94064 37m 19m S 0 3.7 0:00.86 apache2
5214 www-data 20 0 90504 35m 21m S 0 3.5 0:01.13 apache2
5213 www-data 20 0 90420 34m 19m S 0 3.4 0:00.90 apache2
2677 www-data 20 0 52964 16m 684 S 0 1.6 0:00.05 memcached
5206 root 20 0 80812 10m 6596 S 0 1.1 0:00.22 apache2
2720 root 20 0 12924 8784 1488 S 0 0.9 0:00.01 miniserv.pl
2701 www-data 20 0 43672 8252 684 S 0 0.8 0:00.01 memcached
2681 www-data 20 0 41804 7256 684 S 0 0.7 0:00.02 memcached
2683 www-data 20 0 41640 6156 676 S 0 0.6 0:00.00 memcached
2707 www-data 20 0 38708 3064 676 S 0 0.3 0:00.00 memcached
2757 root 20 0 8164 2648 2096 S 0 0.3 0:00.08 sshd
2716 postfix 20 0 6096 2504 1796 S 0 0.2 0:00.01 tlsmgr
2679 www-data 20 0 37688 2032 676 S 0 0.2 0:00.00 memcached

фронтом - nginx, бакендом - apache, для ускорения работает eaccelerator + memcached, база - mysql

Аватар пользователя darkdim darkdim 23 января 2011 в 10:15

"<a href="mailto:Siegfrid@drupal.org">Siegfrid@drupal.org</a>" wrote:
фронтом - nginx, бакендом - apache, для ускорения работает eaccelerator + memcached, база - mysql

на какой оси у Вас крутится?

Аватар пользователя darkdim darkdim 23 января 2011 в 12:48

я почему спросил, в топе несколько процессов memcached, очевидно конфиг через bins. В фри несколько другой подход?

Аватар пользователя darkdim darkdim 24 июня 2011 в 0:03

StartServers 2
MaxClients 800
MinSpareThreads 30
MaxSpareThreads 500
ThreadsPerChild 50
MaxRequestsPerChild 10000
ServerLimit 800

last pid: 2284; load averages: 0.40, 0.38, 0.40 up 0+02:30:54 22:54:47
93 processes: 93 sleeping
CPU: 16.3% user, 0.0% nice, 2.8% system, 0.2% interrupt, 80.7% idle
Mem: 1231M Active, 2227M Inact, 839M Wired, 7128K Cache, 827M Buf, 3603M Free
Swap: 8192M Total, 8192M Free

PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND
1767 www 2 44 0 390M 174M nanslp 1 3:50 10.35% /usr/lo
1766 www 2 44 0 388M 173M nanslp 1 3:57 7.76% /usr/lo
1783 www 2 44 0 392M 183M nanslp 0 2:16 5.57% /usr/lo
1792 www 2 44 0 386M 169M nanslp 3 2:19 5.18% /usr/lo
1786 www 2 44 0 394M 180M nanslp 1 3:11 4.79% /usr/lo
1791 www 2 44 0 393M 182M nanslp 0 2:57 4.59% /usr/lo
1819 www 2 44 0 391M 204M nanslp 0 3:29 2.20% /usr/lo
1787 www 2 44 0 389M 171M nanslp 0 3:45 1.95% /usr/lo
1771 www 2 44 0 383M 167M nanslp 1 2:56 1.86% /usr/lo
1796 www 2 44 0 388M 175M nanslp 1 2:25 1.76% /usr/lo
1803 www 2 44 0 391M 178M nanslp 0 2:05 0.20% /usr/lo
1590 mysql 24 44 0 2914M 905M ucond 0 7:06 0.10% [mysqld
1769 www 2 44 0 390M 174M nanslp 3 3:22 0.00% /usr/lo
1817 www 2 44 0 387M 175M nanslp 0 2:53 0.00% /usr/lo
1798 www 2 44 0 394M 175M nanslp 1 2:53 0.00% /usr/lo
1826 www 2 44 0 390M 179M nanslp 1 2:40 0.00% /usr/lo
1608 nobody 6 76 0 107M 63372K ucond 2 0:18 0.00% /usr/lo
1059 www 1 44 0 33440K 14060K biord 1 0:15 0.00% nginx:
1060 www 1 44 0 31392K 13084K kqread 0 0:13 0.00% nginx:
1058 www 1 44 0 31392K 13200K kqread 0 0:10 0.00% nginx: