Автор Тема: Apache 2 + php + mysql, Много, много ниска пройзводителност  (Прочетена 3668 пъти)

abadon

  • Напреднали
  • *****
  • Публикации: 510
  • Distribution: Debian
  • Window Manager: KDE
    • Профил
    • WWW
Здравейте.

Имам виртуална машина, която използвам за да си хоствам сайтчето. OS-а ми е Ubuntu Hardy, Kernel 2.6.24-25-virtual, VMware tools е последна версия, хост машината е с VMware ESX 4 с процесори Intel (R) Xeon (R) CPU E5405@2.00GHz. За моята виртуална машина са заделени 256MB RAM, ограничен съм да използвам до 450 Mhz процесор на един Xeon и имам 100Mbit-flat канал към интернет. Сървъра работи стабилно но производителността е ужасно ниска: 
Цитат
root@host:~# ab -c 10 -n 100 http://mysite.com/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>       
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/     

Benchmarking mysite.com (be patient).....done


Server Software:        Apache
Server Hostname:        mysite.com
Server Port:            80                 

Document Path:          /
Document Length:        39066 bytes

Concurrency Level:      10
Time taken for tests:   25.560 seconds
Complete requests:      100
Failed requests:        0
Write errors:           0
Total transferred:      3943400 bytes
HTML transferred:       3906600 bytes
Requests per second:    3.91 [#/sec] (mean)
Time per request:       2555.965 [ms] (mean)
Time per request:       255.596 [ms] (mean, across all concurrent requests)
Transfer rate:          150.67 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        1    1   0.5      1       4
Processing:   543 2534 752.4   2862    3198
Waiting:      539 2516 754.4   2854    3194
Total:        545 2535 752.2   2863    3199

Percentage of the requests served within a certain time (ms)
  50%   2863
  66%   2953
  75%   2997
  80%   3018
  90%   3070
  95%   3158
  98%   3179
  99%   3199
 100%   3199 (longest request)

Моите конфигурации са следните:
/etc/apache2/apache2.conf
Цитат
ServerRoot "/etc/apache2"
LockFile /var/lock/apache2/accept.lock
PidFile ${APACHE_PID_FILE}
Timeout 300
KeepAlive On   
MaxKeepAliveRequests 100
KeepAliveTimeout 2 

<IfModule mpm_worker_module>                                               
    StartServers          4                                               
    MaxClients           20                                               
    MinSpareThreads       2                                               
    MaxSpareThreads      20                                               
    ThreadsPerChild       5                                               
    MaxRequestsPerChild   1024                                             
</IfModule>   

User ${APACHE_RUN_USER}                       
Group ${APACHE_RUN_GROUP} 
AccessFileName .htaccess

<Files ~ "^\.ht">                                                     
    Order allow,deny                                                   
    Deny from all                                                     
</Files>

DefaultType text/plain
HostnameLookups Off
ErrorLog /var/log/apache2/error.log
LogLevel warn
# Include module configuration:
Include /etc/apache2/mods-enabled/*.load
Include /etc/apache2/mods-enabled/*.conf

# Include all the user configurations:
Include /etc/apache2/httpd.conf       

# Include ports listing
Include /etc/apache2/ports.conf

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined       
LogFormat "%h %l %u %t \"%r\" %>s %b" common                                             
LogFormat "%{Referer}i -> %U" referer                                                   
LogFormat "%{User-agent}i" agent   

ServerTokens Prod
ServerSignature Off
# Include generic snippets of statements
Include /etc/apache2/conf.d/

# Include the virtual host configurations:
Include /etc/apache2/sites-enabled/

/etc/apache2/sites-enabled/000-default
Цитат
NameVirtualHost *                                     
<VirtualHost *>                                       
        ServerAdmin webmaster@mysite.com     

        DocumentRoot /var/www/
        <Directory />         
                Options +ExecCGI Indexes
                Options +FollowSymLinks
                AllowOverride None     
        </Directory>                   
        <Directory /var/www/>           
                Options +ExecCGI Indexes +FollowSymLinks MultiViews
                AddHandler fcgid-script .php                       
                FCGIWrapper /usr/lib/cgi-bin/php5 .php             
                AllowOverride All                                 
                Order allow,deny                                   
                allow from all                                     
        </Directory>                                               

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog /var/log/apache2/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog /var/log/apache2/access.log combined
        ServerSignature On

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options +ExecCGI Indexes MultiViews +FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>

В /etc/php5/cgi/php.ini съм променил от дифолт конфигурацията това, защото искам за качвам видео файлове с размер до 200МВ.
Цитат
post_max_size = 256M
upload_max_filesize = 200M
max_execution_time = 300 ; Maximum execution time of each script, in seconds
max_input_time = 600 ; Maximum amount of time each script may spend parsing request data
memory_limit = 128M ; Maximum amount of memory a script may consume (16MB default)

Инсталирал съмeAccelerator съгласно инструкциите тук Моята конфигурация в /etc/php5/conf.d/eaccelerator.ini е следната:
Цитат
extension="eaccelerator.so"
eaccelerator.shm_size="16"
eaccelerator.cache_dir="/var/cache/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="0"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="10"
eaccelerator.shm_prune_period="10"
eaccelerator.shm_only="1"
eaccelerator.compress="1"
eaccelerator.compress_level="9"

В /etc/mysql/my.cnf съм променил това:
Цитат
max_allowed_packet = 128M

Файловата ми система е reiserfs монтирана със опциите relatime,noatime,notail

Когато тествам с ab и наблюдавам с top Забалезвям следното:
Цитат
top - 14:57:04 up 8 days, 14 min,  2 users,  load average: 2.52, 0.56, 0.33
Tasks:  65 total,  13 running,  52 sleeping,   0 stopped,   0 zombie
Cpu(s): 77.6%us, 20.9%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  1.5%si,  0.0%st
Mem:    255764k total,   206372k used,    49392k free,    31600k buffers
Swap:   401400k total,        0k used,   401400k free,    76836k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                       
 8068 www-data  20   0 50732  20m  15m R  1.9  8.2   0:04.98 php5                                                                                         
 8076 www-data  20   0 49916  17m  12m R  1.9  7.0   0:06.52 php5                                                                                         
 8081 www-data  20   0 48864  12m 8960 R  1.9  4.9   0:01.16 php5                                                                                         
 8090 www-data  20   0 49160  13m 9932 R  1.9  5.5   0:01.30 php5                                                                                         
 8595 www-data  20   0 48864  12m 8780 R  1.9  4.8   0:00.22 php5                                                                                         
 8596 www-data  20   0 49400  12m 8780 R  1.9  5.0   0:00.20 php5                                                                                         
 8599 www-data  20   0 49396  12m 8780 R  1.9  4.9   0:00.18 php5                                                                                         
 8600 www-data  20   0 48864  12m 8780 R  1.9  4.8   0:00.18 php5                                                                                         
  810 mysql     20   0  130m  23m 2692 S  1.6  9.5   0:38.81 mysqld                                                                                       
 8597 www-data  20   0 49400  12m 8780 R  1.3  5.0   0:00.18 php5                                                                                         
 8598 www-data  20   0 49400  12m 8780 R  1.3  5.0   0:00.18 php5                                                                                         
 8611 root      20   0 34280 9960 6376 R  1.3  3.9   0:00.04 php                                                                                           
 6641 www-data  20   0 69420 4140 1640 S  0.6  1.6   0:00.23 apache2                                                                                       
 8604 www-data  20   0 48324 9.8m 7028 S  0.6  3.9   0:00.08 php5                                                                                         
    1 root      20   0  1800  280   68 S  0.0  0.1   0:01.54 init                                                                                         
    2 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 kthreadd                                                                                     
    3 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 migration/0                                                                                   
    4 root      15  -5     0    0    0 S  0.0  0.0   0:00.32 ksoftirqd/0                                                                                   
    5 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/0                                                                                   
    6 root      15  -5     0    0    0 S  0.0  0.0   0:02.66 events/0                                                                                     
    7 root      15  -5     0    0    0 S  0.0  0.0   0:00.28 khelper 

mtop показва това:
Цитат
load average: 1.06, 1.07, 0.59 mysqld 5.0.51a-3ubuntu5.4 up 0 day(s),  4:53 hrs
1 threads: 1 running, 7 cached. Queries/slow: 1.1M/0 Cache Hit: 94.42%
Opened tables: 0  RRN: 1.7K  TLW: 0  SFJ: 0  SMP: 0  QPS: 4

ID       USER     HOST             DB           TIME   COMMAND STATE        INFO
7541     root     localhost                            Query                show full processlist

Някакви предложения ?Къде може да е проблема?

Предварително благодаря!

P.S> Когато тествам с html  файл по този начин ab -c 10 -n 100 http://mysite.com/phpMyAdmin/Documentation.html обработвам 2485.46 заявки за секунда и мрежата ми се запълва стигам 2МВ/sec (толкова ми е връзката към нета на машината от която пускам ab)

Пробвах да тествам и със следния php файл.
Цитат
<?php
    echo "Go";
?>


или пък само go в него без нищо друго и резултата ми беше 99 връзки за секунда.
Активен

Успешното Boot-ване на Windows завършва с рестарт!!!
You are registered as user #382190 with the Linux Counter
Всеки пост - отговор на въпрос

wfw

  • Напреднали
  • *****
  • Публикации: 249
  • Distribution: Debian
  • Window Manager: none
    • Профил
Не чета достатъчно внимателно...

пробвал ли си PHP като модул? дали работи пак толкова бавно?
« Последна редакция: Nov 19, 2009, 17:59 от wfw »
Активен

abadon

  • Напреднали
  • *****
  • Публикации: 510
  • Distribution: Debian
  • Window Manager: KDE
    • Профил
    • WWW
Да имам swap дял. Както се вижда от top-а не го пипа:
Цитат
Swap:   401400k total,        0k used,   401400k free,    76836k cached

С дефоулт конфигурацията на апачето за IfModule mpm_worker_module го пипаше и трупаше около 60 МВ но сега както съм го конфигурирал, по начина показан по-горе не го пипа.

Да пробвам съм mod_php с него почнах в началото и се мъчих, оптимизирах и т.н. но с него стигах до 2 заявки за секунда и като напишех ab -c 10 -n 100 http://mysite.com/ и CPU-то ми биеше на мах и край да обслужвам заявки повече и не се разтоварваше въобще. А сега поне с worker-а се разтоварва след като приключи теста.
« Последна редакция: Nov 19, 2009, 18:03 от abadon »
Активен

Успешното Boot-ване на Windows завършва с рестарт!!!
You are registered as user #382190 with the Linux Counter
Всеки пост - отговор на въпрос

VladSun

  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Пробвай да инсталираш APC

Код
GeSHi (Bash):
  1. apt-get install php-apc

също така и mod_php е по-добре.

Дай и mysql конфиг файла.
« Последна редакция: Nov 19, 2009, 23:33 от VladSun »
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

abadon

  • Напреднали
  • *****
  • Публикации: 510
  • Distribution: Debian
  • Window Manager: KDE
    • Профил
    • WWW
Това php-apc го нямам в хранилищата на Убунту-то 8.04 TLS с което съм. Сложили са го в 8.10 затова трябваше да го инсталирам по този начин. Като изпълних apt-get update видях че тази сутрин е излезнал update на пакетите  apache2-mpm-worker, apache2-utils и apache2.2-common и реших след като ги ъпдейтна да тествам отново. Пуснах ab -c 20 -n 1000 http://mysite.com/  при което гледам резултата:  40.11 Requests per second, в top-а нито apache се появи нито нищо CPU-то въобще не се натоварваше.  :o  Повтарям теста като гледам с watch -n 1 ps -ylC apache2 --sort:rss И какво да видя 7 apache2 процеса ми заемат по около 3 МВ RAM всеки, без въобще нищо да се променя.  :o
Промених в /etc/apache2/apache2.conf нещата по този начин:
Цитат
<IfModule mpm_worker_module>                                               
    StartServers          4                                               
    MaxClients          200                                               
    MinSpareThreads      20                                               
    MaxSpareThreads     200                                               
    ThreadsPerChild      50                                               
    MaxRequestsPerChild   1024                                             
</IfModule>   

Пускам отново ab -c 200 -n 1000 http://mysite.com/ резултата е 156.70 Requests per second а CPU-то не се натоварва на повече от 1.5%
Правя следващ опит ab -c 200 -n 10000 http://mysite.com/ езултата е 153.40 Requests per second а CPU-то не се натоварва на повече от 2.0%
Най-вероятно Apache-то ще може да обработи доста повече заявки, но за съжаление връзката на компютъра от който пускам ab-то е само 10Mbps и си запълвам канала.

Не знам как е в другите дистрибуции но при Ubuntu не мога да имам  mod_php и apache2-mpm-worker. Зависимостите са така направени че mod_php ми слага форкващия апач.

А иначе това ми е конфигурацията на Mysql-а
Цитат
#                                                                   
# The MySQL database server configuration file.                     
#                                                                   
# You can copy this to one of:                                       
# - "/etc/mysql/my.cnf" to set global options,                       
# - "~/.my.cnf" to set user-specific options.                       
#                                                                   
# One can use all long options that the program supports.           
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
#                                                                   
# For explanations see                                               
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html     

# This will be passed to all mysql clients
# It has been reported that passwords should be enclosed with ticks/quotes
# escpecially if they contain "#" chars...                               
# Remember to edit /etc/mysql/debian.cnf when changing the socket location.
[client]                                                                   
port            = 3306                                                     
socket          = /var/run/mysqld/mysqld.sock                             

# Here is entries for some specific programs
# The following values assume you have at least 32M ram

# This was formally known as [safe_mysqld]. Both versions are currently parsed.
[mysqld_safe]                                                                 
socket          = /var/run/mysqld/mysqld.sock                                 
nice            = 0                                                           

[mysqld]
#       
# * Basic Settings
#                 

#
# * IMPORTANT
#   If you make changes to these settings and your system uses apparmor, you may
#   also need to also adjust /etc/apparmor.d/usr.sbin.mysqld.                   
#                                                                               

user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
port            = 3306                       
basedir         = /usr                       
datadir         = /var/lib/mysql             
tmpdir          = /tmp                       
language        = /usr/share/mysql/english   
skip-external-locking                       
#                                           
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.     
bind-address            = 127.0.0.1                             
#                                                               
# * Fine Tuning                                                 
#                                                               
key_buffer              = 16M                                   
max_allowed_packet      = 128M                                   
thread_stack            = 128K                                   
thread_cache_size       = 8                                     
#max_connections        = 100                                   
table_cache            = 64                                     
#thread_concurrency     = 10                                     
#                                                               
# * Query Cache Configuration                                   
#                                                               
query_cache_limit       = 1M                                     
query_cache_size        = 16M                                   
#                                                               
# * Logging and Replication                                     
#                                                               
# Both location gets rotated by the cronjob.                     
# Be aware that this log type is a performance killer.           
#log            = /var/log/mysql/mysql.log                       
#                                                               
# Error logging goes to syslog. This is a Debian improvement :) 
#                                                               
# Here you can see queries with especially long duration         
#log_slow_queries       = /var/log/mysql/mysql-slow.log         
#long_query_time = 5                                             
#log-queries-not-using-indexes                                   
#                                                               
# The following can be used as easy to replay backup logs or for replication.
# note: if you are setting up a replication slave, see README.Debian about   
#       other settings you may need to change.                               
#server-id              = 1                                                 
#log_bin                        = /var/log/mysql/mysql-bin.log               
expire_logs_days        = 10                                                 
max_binlog_size         = 100M                                               
#binlog_do_db           = include_database_name                             
#binlog_ignore_db       = include_database_name                             
#                                                                           
# * BerkeleyDB                                                               
#                                                                           
# Using BerkeleyDB is now discouraged as its support will cease in 5.1.12.   
skip-bdb                                                                     
#                                                                           
# * InnoDB                                                                   
#                                                                           
# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.     
# Read the manual for more InnoDB related options. There are many!           
# You might want to disable InnoDB to shrink the mysqld process by circa 100MB.
#skip-innodb                                                                   
#                                                                             
# * Security Features                                                         
#                                                                             
# Read the manual, too, if you want chroot!                                   
# chroot = /var/lib/mysql/                                                     
#                                                                             
# For generating SSL certificates I recommend the OpenSSL GUI "tinyca".       
#                                                                             
# ssl-ca=/etc/mysql/cacert.pem                                                 
# ssl-cert=/etc/mysql/server-cert.pem                                         
# ssl-key=/etc/mysql/server-key.pem                                           



[mysqldump]
quick     
quote-names
max_allowed_packet      = 16M

[mysql]
#no-auto-rehash # faster start of mysql but no tab completition

[isamchk]
key_buffer              = 16M

#
# * NDB Cluster
#
# See /usr/share/doc/mysql-server-*/README.Debian for more information.
#
# The following configuration is read by the NDB Data Nodes (ndbd processes)
# not from the NDB Management Nodes (ndb_mgmd processes).
#
# [MYSQL_CLUSTER]
# ndb-connectstring=127.0.0.1


#
# * IMPORTANT: Additional settings that can override those from this file!
# The files must end with '.cnf', otherwise they'll be ignored.
#
!includedir /etc/mysql/conf.d/
Активен

Успешното Boot-ване на Windows завършва с рестарт!!!
You are registered as user #382190 with the Linux Counter
Всеки пост - отговор на въпрос

bonbon

  • Напреднали
  • *****
  • Публикации: 112
  • Distribution: Debian
  • Window Manager: Gnome
    • Профил
    • WWW
В конфига на apache имаш MaxClients          200

При 256MB RAM, не е ли множко. :)
До колкото знам MaxClients = RAM / 8
Активен

abadon

  • Напреднали
  • *****
  • Публикации: 510
  • Distribution: Debian
  • Window Manager: KDE
    • Профил
    • WWW
Преди като използвах apache2-mpm-prefork за MaxClients го определях по следния начин. Пускам  ps -ylC apache2 --sort:rss и гледам в колоната RSS колко RAM средно ми заема 1 процес. Щом съм пуснал php-но числото беше в рамките на 10-12МВ. След това си разделям наличната RAM на средното което съм видял и получавам колко да ми е MaxClients. Ако го превишиш почва да заслуапва. Ако си го на целил никога не ти пипа swap-а а просто винаги ти заема всичката налична RAM. Все пак имай предвид, че ако не си си конфигурирал и други процеси адекватно може те да са причина за използване на swap при максимален товар на Apache-то. Сега след като минах на apache2-mpm-worker за обслужването на 200 клиента имам 7 апач процеса които ми заемат около 3 МВ всеки. Имам налична даже над 130МВ.

Ако ти се чете ето ти малко полезни линкове от които се ръководех:
https://calomel.org/apache_server.html
http://www.cyberciti.biz/tips/howto-performance-benchmarks-a-web-server.html
http://www.ibm.com/developerworks/linux/library/l-tune-lamp-2.html
« Последна редакция: Nov 20, 2009, 11:36 от abadon »
Активен

Успешното Boot-ване на Windows завършва с рестарт!!!
You are registered as user #382190 with the Linux Counter
Всеки пост - отговор на въпрос

VladSun

  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
А какво става с алгоритъма ти за изчисление на паметта, когато базата данни почне да се пълни и съответно започва да взима повече памет за извършване на сортирания например?
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

abadon

  • Напреднали
  • *****
  • Публикации: 510
  • Distribution: Debian
  • Window Manager: KDE
    • Профил
    • WWW
Винаги си оставям малко запас. Ето преди като ползвах фокрващия апач бях сложил максимум 20 клиента като знаех че един ми заема между 10 и 12МВ RAM. Пък сървъра трябва да се наблюдава все пак като видя че почва да ползва слуап ще го мисля. Примерно бих си направив един конфиг на mysql-а така:
Цитат
[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

max_user_connections=25

max_connections=500

interactive_timeout=10

wait_timeout=10

connect_timeout=10

thread_cache_size=128

key_buffer=16M

join_buffer=1M

max_allowed_packet=16M

table_cache=1024

record_buffer=1M

sort_buffer_size=2M

read_buffer_size=2M

max_connect_errors=10# Try number of CPU's*2 for thread_concurrencythread_concurrency=8

myisam_sort_buffer_size=64M

#log-binserver-id=1

old-passwords = 1

[mysql.server]

user=mysqlbasedir=/var/lib

[safe_mysqld]

err-log=/var/log/mysqld.log

pid-file=/var/lib/mysql/mysql.pid

open_files_limit=8192

[mysqldump]

quickmax_allowed_packet=16M

[mysql]

no-auto-rehash

#safe-updates

[isamchk]

key_buffer=64M

sort_buffer=64M

read_buffer=16M

write_buffer=16M

[myisamchk]

key_buffer=64M

sort_buffer=64M

read_buffer=16M

write_buffer=16M

[mysqlhotcopy]

interactive-timeout

Като по този начин ще знам кое колко памет ще ми заема. Как ти се струва като решение? Нали затова е форум да си помагаме, ако имаш някакви по-добри идеи и решиш да ги споделиш ще се радвам да науча нещо ново.
Активен

Успешното Boot-ване на Windows завършва с рестарт!!!
You are registered as user #382190 with the Linux Counter
Всеки пост - отговор на въпрос

bnight

  • Напреднали
  • *****
  • Публикации: 313
  • Distribution: Ubuntu 8.10
  • Window Manager: KDE 3.5.10
    • Профил
    • WWW
Ето една статия по темата която съм писал аз:

http://blog.skyhost.bg/vps-%D1%85%D0%BE%D1%81%D1%82%D0%B8%D0%BD%D0%B3/optimize-vps/

Дано ти бъде от полза.

Поздрави.
Активен

Registered Linux user: 473460
http://skyhost.bg - Хостинг и Домейни

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Преди като използвах apache2-mpm-prefork за MaxClients го определях по следния начин. Пускам  ps -ylC apache2 --sort:rss и гледам в колоната RSS колко RAM средно ми заема 1 процес. Щом съм пуснал php-но числото беше в рамките на 10-12МВ. След това си разделям наличната RAM на средното което съм видял и получавам колко да ми е MaxClients. Ако го превишиш почва да заслуапва. Ако си го на целил никога не ти пипа swap-а а просто винаги ти заема всичката налична RAM. Все пак имай предвид, че ако не си си конфигурирал и други процеси адекватно може те да са причина за използване на swap при максимален товар на Apache-то. Сега след като минах на apache2-mpm-worker за обслужването на 200 клиента имам 7 апач процеса които ми заемат около 3 МВ всеки. Имам налична даже над 130МВ.

Сметката с VmRSS не е много надеждна, особено що се отнася до динамични сайтове. Причината е че..мммм...извадката не е много представителна. Може просто да си уцелил момент, в който apache процесите са изяли по-малко памет. Утре примерно някой може да промени PHP кода, това по някакъв начин да промени memory usage pattern-a и да излезе че ти е трябвала всъщност 2 пъти повече памет, отколкото сметките базирани на моментното състояние. Един малко по-добър вариант е да вземеш high watermark-a на apache процесите:

Код:
for a in `pidof apache2`; do grep VmHWM /proc/$a/status; done|sort|uniq

Въпросната стойност е нещо от сорта на  "откакто съществува този процес, коя е най-високата стойност на изядената от него RAM".


Това пак не е надеждно, но е по-добре от някаква моментна стойност и съответно е малко по-близка до най-лошия възможен вариант.


Друго, което забелязах: бих те посъветвал да не ползваш KeepAlive когато имаш нисък лимит за MaxClients, защото така става по-възможно да останеш без свободни worker-и, които да ти обслужват клиентите. Или ако ще ползваш, намали KeepAliveTimeout-а (то 2 секунди си е нисък де, но все пак да си кажа).

Логиката е следната: представи си че имаш нисък Maxclients лимит (20 да речем). Имаш относително висок, да речем 20-секунден KeepAliveTimeout. За улеснение да речем че едновременно ти се връзват 20 клиента и правят някаква малка заявка. В продължение на 20 секунди, няма да може да се закачи нов клиент, защото всичките 20 worker-a са ти заети да чакат следващата заявка от клиентската конекция.

Да, от keepalive понякога се намазва, обаче има и един друг момент че браузърите и прокситата имат навика да кешират разни обекти и след това да не бълват по 50 GET заявки, за да ти визуализират една страница. Така че не е много сигурно дали ще спечелиш толкова много, това си зависи от usage pattern-а.
Активен

"Knowledge is power" - France is Bacon

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
Проблем с apache 2 + php 5.2.2 + mysql
Настройка на програми
tuningmaniac 9 3615 Последна публикация Jan 23, 2008, 17:21
от Ali Nebi
apache + mysql
Начини за увеличаване на бързодействието
bonbon 6 4439 Последна публикация Jan 14, 2009, 17:16
от beginner
Как да кажа на инит скрипта да се стартира преди apache, mysql...?
Настройка на програми
Ali Nebi 5 1932 Последна публикация Jan 08, 2011, 13:51
от edmon
Mysql + apache
Идеи и мнения
ovdesko 22 6466 Последна публикация Jan 22, 2013, 13:35
от bop_bop_mara
Apache MySQL PHP
Сървъри
4096bits 0 2273 Последна публикация Sep 26, 2014, 19:07
от 4096bits