Страница 1 из 1

Прожорливый Apache

Добавлено: 2008-06-06 13:17:41
Nick_mad
Здравствуйте.

Столкнулся с такой проблемой. На серваке 2 гига оперативы, 1 гиг под себя седает апач (вер. 2.0.63). Как его вразумить чтобы меньше жрал??? вот листинг top по юзеру www ну и плюс один процес от рута.

Код: Выделить всё

 PID     USERNAME     THR PRI NICE   SIZE    RES    STATE  C   TIME   WCPU COMMAND
88009 www                 1   4      0     87696K 17604K accept 0   0:00  0.00% httpd
88010 www                 1   4      0     87696K 17728K accept 0   0:00  0.00% httpd
88012 www                 1   4      0     87696K 17812K accept 0   0:00  0.00% httpd
88011 www                 1   4      0     87696K 17816K accept 0   0:00  0.00% httpd
88021 www                 1   4      0     87696K 15656K accept 0   0:00  0.00% httpd
88013 www                 1   4      0     86672K 16484K accept 0   0:00  0.00% httpd
88016 www                 1   4      0     87696K 16316K accept 1   0:00  0.00% httpd
88020 www                 1   4      0     85648K 10740K accept 1   0:00  0.00% httpd
88055 www                 1   4      0     85648K 10688K accept 1   0:00  0.00% httpd
88056 www                 1   4      0     85648K 10688K accept 1   0:00  0.00% httpd
Я думал ограничить его правкой в /etc/login.conf (взял кусочек с Вашего сайта)

Код: Выделить всё

www:\
        :copyright=/etc/COPYRIGHT:\
        :welcome=/etc/motd:\
        :setenv=MAIL=/var/mail/$,BLOCKSIZE=K,EDITOR=ee:\
        :path=/bin /usr/bin /usr/local/bin:\
        :manpath=/usr/share/man /usr/local/man:\
        :nologin=/sbin/nologin:\
        :cputime=5m:\
        :datasize=512M:\
        :stacksize=4M:\
        :memorylocked=64M:\
        :memoryuse=256M:\
        :filesize=512M:\
        :coredumpsize=0:\
        :openfiles=1024:\
        :maxproc=64:\
        :sbsize=unlimited:\
        :priority=20:\
        :requirehome:\
        :umask=026:\
        :tc=default:
потом выполнил команду cap_mkdb /etc/login.conf, но после внесения правки ничего не поменялося.

По отключал модули которые мне не нужны, тоже ничего. Помогите настроить его правильно. Хотя бы тыкните куда рыть.

Re: Прожорливый Apache

Добавлено: 2008-06-06 13:27:56
Alex Keda
шапку топа покажите

Re: Прожорливый Apache

Добавлено: 2008-06-06 14:47:04
salvator
Апач с чем собран? php модулем? если да - в php.ini попробуйте с memory_limit поэкспериментировать. Сам апач голый не должен столько жрать, у меня 3 метра жрет

Re: Прожорливый Apache

Добавлено: 2008-06-09 9:08:03
Nick_mad
шапку топа покажите

Код: Выделить всё

last pid: 99834;  load averages:  0.00,  0.00,  0.00   up 20+17:19:06  09:00:02
58 processes:  1 running, 57 sleeping
CPU states:  0.4% user,  0.0% nice,  0.0% system,  0.0% interrupt, 99.6% idle
Mem: 490M Active, 1201M Inact, 181M Wired, 25M Cache, 112M Buf, 104M Free
Swap: 4057M Total, 4057M Free

  PID USERNAME     THR PRI NICE   SIZE    RES STATE  C   TIME   WCPU COMMAND
    365 root           1  96    0  4984K  2228K select 1  10:09  0.00% ppp
79986 mysql         3  96    0 81892K 31832K ucond  0   8:14  0.00% mysqld
   526 root            1  96    0  3348K  1512K select 1   5:25  0.00% natd
   877 clamav        1   4    0 57040K 51868K accept 1   3:37  0.00% clamd
18015 squid          1   4    0   307M   302M kqread 0   1:37  0.00% squid
   765 root            2  96    0  7448K  1744K select 0   0:20  0.00% apcupsd
   716 bind            5  96    0 28628K 21800K select 0   0:20  0.00% named
97349 www           1   4     0 87696K 27136K accept 0   0:13  0.00% httpd
98208 www           1   4     0 87696K 26744K accept 0   0:11  0.00% httpd
30732 root            1  96    0 85648K 10660K select 0   0:10  0.00% httpd
98035 www           1   4     0 87696K 24824K accept 1   0:09  0.00% httpd
97572 www           1   4     0 87696K 29748K accept 1   0:07  0.00% httpd
98139 www           1   4     0 87696K 27992K accept 1   0:07  0.00% httpd
   882 clamav        1  20    0  4176K  1904K pause  0   0:05  0.00% freshclam
   637 root            1  96    0  3156K  1024K select 1   0:05  0.00% syslogd
98257 www           1   4     0 87696K 24432K accept 1   0:05  0.00% httpd
   910 root            1  96    0  5616K  2476K select 0   0:04  0.00% sshd
Апач с чем собран?
Да, модуль php подключен. Попробую поиграться с этим параметром. спс.

А что делать с внесенными изменениями в logi.conf? Убирать или оставить???

Re: Прожорливый Apache

Добавлено: 2008-06-09 9:09:10
Alex Keda
а помоему всё нормально

Re: Прожорливый Apache

Добавлено: 2008-06-09 9:27:17
Nick_mad
Всмысле все норманльно?? Тоесть то что он так под себя много берет это нормально? У мня осталося 100 метров памяти, а еще почта не ходит под нагрузкой. Я переживаю что может просто памяти не хватить. Надо идти докуплять пару гигов памяти??? Но я где то читал что апач ел стоко то, а потом после того как доставили память он стал есть больше. Я почему то думал что это можно поднастроить. И почему после внесения изменений в login.conf где явно прописано ограничение на использование памяти апач игнорирует их?? Прошу Вас объяснить мне так незнание порождает страх ну и т.д.

Re: Прожорливый Apache

Добавлено: 2008-06-09 9:34:25
salvator
дык, совсем не обязательно пхп в апаче модулем держать, есть замечательный вариант - FastCGI, только тогда пхп отдельно жрть будет))

Re: Прожорливый Apache

Добавлено: 2008-06-09 9:41:23
Nick_mad
Так и есть при отключеном модуле пхп результат ниже, А где можна больше узнать о разнице апаче с модулем пхп и как FastCGI? И еще ну даже если я их разделю то пхп тоже может под себя брать столько же сколько и брал, тоесть в результате опять свободной памяти не будет.

Код: Выделить всё

PID USERNAME     THR PRI NICE   SIZE    RES STATE  C   TIME   WCPU COMMAND
  226 www            1   4    0  6192K  2868K accept 0   0:00  0.00% httpd
  224 www            1   4    0  6192K  2868K accept 0   0:00  0.00% httpd
  227 www            1   4    0  6192K  2868K accept 0   0:00  0.00% httpd
  225 www            1   4    0  6192K  2868K accept 0   0:00  0.00% httpd
  228 www            1   4    0  6192K  2808K accept 1   0:00  0.00% httpd

Re: Прожорливый Apache

Добавлено: 2008-06-09 10:05:45
serge
Про fast-cgi читайте на этом сайте и ищите по форуму. Очень часто обсуждается данная тема.

Re: Прожорливый Apache

Добавлено: 2008-06-09 10:14:27
salvator
для начала, можно запустить меньше экземпляров пхп, т.к. в случае с модулем они часто висят в холостую, например, при отдаче статического контента. про FastCGI - для апача не скажу, не настраивал, рекомендую nginx - апач по сравнению с ним нервно курит в сторонке по производительности. а здесь написано как пхп к нему подключить http://blog.kovyrin.net/2006/05/30/ngin ... cgi-howto/

Re: Прожорливый Apache

Добавлено: 2008-06-09 13:28:40
Alex Keda
ещё , синтаксис реврита был бы такой же - половина хостингов уже выкинули бы апач...

Re: Прожорливый Apache

Добавлено: 2008-06-09 13:50:19
Nick_mad
К сожалению я не смогу перейти на Nginx так ка у меня сайт как раз использует rewrite. Так что придется юзать апач. Правда я с опаской отношусь ко всему с чем не работал, апач мне более знаком, а вот про Nginx узнал сегодня. Но в будущем объязательно им займуся. А пока буду переводить вечером пхп в режим FastCGI. А там видно будет.

Re: Прожорливый Apache

Добавлено: 2008-06-09 13:52:13
salvator
lissyara писал(а):ещё , синтаксис реврита был бы такой же - половина хостингов уже выкинули бы апач...
нжинксовский реврайт в общем-то не уступает в возможностях апачевскому... можно попробывать конвертер реврайта написать из апача на нжингз

Re: Прожорливый Apache

Добавлено: 2008-06-09 14:15:47
Nick_mad
Что, Nginx настолько круче апача, что стоит себе заимет немного гемора что бы его установить и настроить????

Re: Прожорливый Apache

Добавлено: 2008-06-09 14:33:53
salvator
Nick_mad писал(а):Что, Nginx настолько круче апача, что стоит себе заимет немного гемора что бы его установить и настроить????
имхо, гемора не заимеешь, настраивается гораздо понятнее апача, а на счет круче - у них не много разные ниши, но для фронтенда к fastcgi удобней я ничего не встречал

Re: Прожорливый Apache

Добавлено: 2008-06-09 14:41:30
Alex Keda
salvator писал(а):
lissyara писал(а):ещё , синтаксис реврита был бы такой же - половина хостингов уже выкинули бы апач...
нжинксовский реврайт в общем-то не уступает в возможностях апачевскому... можно попробывать конвертер реврайта написать из апача на нжингз
ф топку.
по мне - лучше бы подстроились под апач.

Re: Прожорливый Apache

Добавлено: 2008-06-09 14:59:30
salvator
lissyara писал(а): ф топку.
по мне - лучше бы подстроились под апач.
по мне так апачевский реврайт ф топку - синтаксис моск поломать можно

Re: Прожорливый Apache

Добавлено: 2008-06-09 15:12:34
Alex Keda
можно.
однако 80% мира переучить тяжело.
объёмную задачу взяли разработчики =)
======
или модулем грузить - родной или апачёвый синтаксис юзается.

Re: Прожорливый Apache

Добавлено: 2008-06-09 16:03:21
helloworld
*мимо проходя*....lighttpd

Re: Прожорливый Apache

Добавлено: 2008-06-09 21:39:02
ProFTP

Код: Выделить всё

92684 www           1  20    0   286M     0K lockf    0:36  0.00% <httpd>
92770 www           1  20    0   286M     0K lockf    0:32  0.00% <httpd>
92787 www           1  20    0   288M     0K lockf    0:30  0.00% <httpd>
92772 www           1  20    0   287M     0K lockf    0:30  0.00% <httpd>
92685 www           1  20    0   287M     0K lockf    0:30  0.00% <httpd>
92689 www           1  20    0   286M     0K lockf    0:30  0.00% <httpd>
92788 www           1  20    0   287M     0K lockf    0:30  0.00% <httpd>
92686 www           1  20    0   287M     0K lockf    0:29  0.00% <httpd>
92683 www           1  20    0   286M     0K lockf    0:29  0.00% <httpd>
там еще пхп может грузить модули которые приписаны в конфиге extensions.ini

Код: Выделить всё

# top | grep php-cgi
 3410 rab           1   4    0   279M 13172K accept   0:00  0.80% php-cgi
 3408 rab           1   8    0   277M  7272K wait     0:00  0.48% php-cgi
 3410 rab           1   4    0   279M 13172K accept   0:00  0.07% php-cgi
# top | grep php-cgi
 3410 rab           1   4    0   279M 13172K accept   0:00  0.07% php-cgi
# top | grep php-cgi
# top | grep php-cgi
# top | grep php-cgi
# top | grep php-cgi
одинаково памяти жрет?

Re: Прожорливый Apache

Добавлено: 2008-06-10 9:05:51
salvator
как вам такое удается, научите :)

Код: Выделить всё

# top | grep php-cgi
 1771 php           1   4    0 20516K 12464K accept 1   0:00  0.20% php-cgi
 1772 php           1   4    0 20516K 12284K accept 1   0:00  0.10% php-cgi

Код: Выделить всё

-su-2.05b# top | grep php-cgi
70551 www          1   4    0 11920K  7808K accept   0:05  0.93% php-cgi
69187 www          1   4    0 11912K  7840K accept   0:06  0.68% php-cgi
70952 www          1   4    0 11992K  8156K accept   1:52  0.59% php-cgi
70933 www          1   4    0 11948K  8100K accept   1:51  0.54% php-cgi
78177 www          1   4    0 11880K  7760K accept   0:02  0.10% php-cgi
не много разные конфигурации пхп, поэтому разный расход памяти

Re: Прожорливый Apache

Добавлено: 2008-06-19 3:04:09
ProFTP
а че у меня а у вас ???
сколько должно быть??

делал по статье, глюк где-то?

Re: Прожорливый Apache

Добавлено: 2008-06-19 3:07:21
ProFTP
salvator, что именно в конфиге, модули к пхп? у меня минимум

Код: Выделить всё

extension=simplexml.so
extension=spl.so

extension=mysqli.so
extension=snmp.so
extension=mbstring.so
extension=mysql.so
extension=pcre.so
extension=xml.so
extension=xslt.so
extension=xslt.so
extension=bz2.so
extension=mcrypt.so
extension=session.so
extension=zlib.so
extension=openssl.so
extension=tokenizer.so
extension=pdf.so
extension=gd.so
extension=ctype.so
extension=sqlite.so

extension=overload.so
extension=pspell.so
extension=xml.so
из-за этого может быть?

Код: Выделить всё

$ php --ini
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/local/lib/php/20060613/xslt.so' - Cannot open "/usr/local/lib/php/20060613/xslt.so" in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library '/usr/local/lib/php/20060613/xslt.so' - Cannot open "/usr/local/lib/php/20060613/xslt.so" in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/local/lib/php/20060613/xslt.so' - Cannot open "/usr/local/lib/php/20060613/xslt.so" in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library '/usr/local/lib/php/20060613/xslt.so' - Cannot open "/usr/local/lib/php/20060613/xslt.so" in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/local/lib/php/20060613/overload.so' - Cannot open "/usr/local/lib/php/20060613/overload.so" in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library '/usr/local/lib/php/20060613/overload.so' - Cannot open "/usr/local/lib/php/20060613/overload.so" in Unknown on line 0
PHP Warning:  Module 'xml' already loaded in Unknown on line 0

Warning: Module 'xml' already loaded in Unknown on line 0

Re: Прожорливый Apache

Добавлено: 2008-06-19 6:28:18
zingel
пересобрать xslt из порта /usr/ports/textproc/php4-xslt и дать сюда вывод команды:

Код: Выделить всё

ldd -a /usr/local/lib/php/20060613/xslt.so
Что, Nginx настолько круче апача, что стоит себе заимет немного гемора что бы его установить и настроить????
круче апача только апачь, нджинкс нужен для разгрузки апача и кеширования контента, гемора никакого нет, все делается очень просто.
вот листинг top по юзеру www ну и плюс один процес от рута.
Наcтройте параметры mpm-prefork && worker

Код: Выделить всё

StartServers       1
MinSpareServers    1
MaxSpareServers    5
MaxClients        10
MaxRequestsPerChild  4000 

MaxKeepAliveRequests 100
KeepAliveTimeout 5
ServerLimit 256
StartServers 15
MinSpareServers 15
MaxSpareServers 20
MaxClients 200
MaxRequestsPerChild 500 

Re: Прожорливый Apache

Добавлено: 2008-06-19 11:18:13
ProFTP
поставил еще

Код: Выделить всё

 ThreadStackSize
я xslt.so удалил сейчас из конфига, остальное подпраивbл, ничего не изменилось, или он нужен xslt.so?

забыл сказать, apache2.2.8, возможно из-за него

вот нашел может так и надо:
http://forum.ixbt.com/topic.cgi?id=76:7848

сказали меньше сделать ThreadStackSize

Код: Выделить всё

 apachectl -V
Server version: Apache/2.2.8 (FreeBSD)
Server built:   May 14 2008 11:30:05
Server's Module Magic Number: 20051115:11
Server loaded:  APR 1.2.8, APR-Util 1.2.8
Compiled using: APR 1.2.8, APR-Util 1.2.8
Architecture:   32-bit
Server MPM:     Prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APACHE_MPM_DIR="server/mpm/prefork"
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_FLOCK_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=128
 -D HTTPD_ROOT="/usr/local"
 -D SUEXEC_BIN="/usr/local/sbin/suexec"
 -D DEFAULT_PIDLOG="/var/run/httpd.pid"
 -D DEFAULT_SCOREBOARD="/var/run/apache_runtime_status"
 -D DEFAULT_LOCKFILE="/var/run/accept.lock"
 -D DEFAULT_ERRORLOG="/var/log/httpd-error.log"
 -D AP_TYPES_CONFIG_FILE="etc/apache22/mime.types"
 -D SERVER_CONFIG_FILE="etc/apache22/httpd.conf"
Yegg
ситуация начинае прояснятся. оказывается - каждые 8МБ памяти это выделенный стэк, как и описал pluknet - для одного thread'a апача.
Да, похоже что так. Собственно, стековый регион памяти - это надмножество анонимной памяти с доступом как минимум PROT_READ и PROT_WRITE. Так что всё сходится.

задача поставить минимально необоходимый чтобы выжать максимальное кол-во тредов.
Имхо, это не возымеет ожидаемый эффект. ThreadStackSize задает максимально возможный размер региона памяти стекового типа. Реальное выделение памяти происходит в момент обращения к новым, непроинициализированным страницам.

интересует также чем чьеревато черезмерное уменьшение стека.
stack overflow со всеми вытекающими. Как правило, процесс получает SIGSEGV (ошибка сегментации).

P.S. Пища для размышлений.
Процессы в некоторых случаях могут интенсивно использовать стек, для чего может потребоваться стек соответствущего размера. Количество виртуальной памяти, отдаваемой под стек, жестко устанавливается в момент инициализации процесса и не может быть изменено. Проблема в том, что безопасное изменение размера стека невозможно, так как новый сегмент стека может перекрыть соседний сегмент, в сторону которого растёт стек. В качестве воркэраунда производится перезапуск процесса (как правило, через семейство exec*()) с указанием об инициализации стека необходимого размера.

Добавление от 20.02.2008 02:03:

a higher number of threads per child process will be achievable if ThreadStackSize is set to a value lower than the operating system default
Видимо, речь об ограниченном размере виртуальной памяти.

Добавление от 20.02.2008 02:21:

Yegg
оказывается - каждые 8МБ памяти это выделенный стэк, как и описал pluknet - для одного thread'a апача.
Тогда всё намного проще: новому треду назначается размер стека через pthread_attr_setstack()/pthread_attr_setstacksize().
В конечном итоге, всё равно дело сводится к выделению стекового региона памяти через mmap()

Добавление от 20.02.2008 02:30:

8МБ под стэк это конечно ЖЕСТКО.
К слову, в FreeBSD и Солярисе умолчальный размер стека для 32- и 64-битных архитектур 1 и 2 мбайта соответственно.
В linux AFAIK тоже самое, не проверял
еще может быть ошибка сегментации, но я ее не вижу...