Je suis en cours d'exécution centos 5.5 avec 768 Mo de RAM. Je continue à obtenir server reached MaxClients setting, consider raising the MaxClients setting
dans les journaux aussi Apache fonctionne très lentement. quand je regarde les graphiques de cactus, il montre que le serveur n'utilise même pas toutes les ressources .. voici la configuration actuelle
<IfModule prefork.c>
StartServers 8
MinSpareServers 5
MaxSpareServers 10
ServerLimit 1024
MaxClients 768
MaxRequestsPerChild 4000
</IfModule>
<IfModule worker.c>
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
free -m
total used free shared buffers cached
Mem: 768 352 415 0 0 37
-/+ buffers/cache: 315 452
Swap: 0 0 0
top - 11:03:54 up 41 days, 11:53, 1 user, load average: 0.05, 0.03, 0.00
Tasks: 35 total, 1 running, 34 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.3%st
Mem: 786432k total, 389744k used, 396688k free, 0k buffers
Swap: 0k total, 0k used, 0k free, 38284k cached
J'ai essayé ce qui suit mais le serveur répond très lentement
<IfModule worker.c>
#StartServers 2
#MaxClients 150
#MinSpareThreads 25
#MaxSpareThreads 75
#ThreadsPerChild 25
#MaxRequestsPerChild 0
StartServers 20
MaxClients 1024
ServerLimit 1024
MinSpareThreads 128
MaxSpareThreads 768
ThreadsPerChild 64
MaxRequestsPerChild 0
</IfModule>
free -m
total used free shared buffers cached
Mem: 768 324 443 0 0 37
-/+ buffers/cache: 286 481
Swap: 0 0 0
@regilero
J'ai mis à jour pour
<IfModule prefork.c>
StartServers 12
MinSpareServers 12
MaxSpareServers 12
MaxClients 50
MaxRequestsPerChild 300
</IfModule>
en utilisant le haut je vois
Tasks: 36 total, 1 running, 35 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.3%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 786432k total, 613180k used, 173252k free, 0k buffers
Swap: 0k total, 0k used, 0k free, 76488k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 10364 92 60 S 0.0 0.0 1:09.53 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd/808
3 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khelper/808
124 root 16 -4 12620 8 4 S 0.0 0.0 0:00.00 udevd
533 root 20 0 95504 5692 228 S 0.0 0.7 4:02.94 memcached
546 root 20 0 5924 332 276 S 0.0 0.0 6:54.51 syslogd
557 root 20 0 101m 1456 868 S 0.0 0.2 13:18.64 snmpd
570 root 20 0 62640 316 208 S 0.0 0.0 2:39.56 sshd
579 root 20 0 21656 24 20 S 0.0 0.0 0:00.00 xinetd
589 root 20 0 12072 12 8 S 0.0 0.0 0:00.05 mysqld_safe
940 mysql 20 0 559m 164m 3832 S 0.3 21.5 209:33.88 mysqld
1015 root 20 0 20880 200 132 S 0.0 0.0 0:10.48 crond
1023 root 20 0 46748 4 0 S 0.0 0.0 0:00.00 saslauthd
1024 root 20 0 46748 4 0 S 0.0 0.0 0:00.00 saslauthd
3605 root 20 0 62832 2168 636 S 0.0 0.3 0:02.58 sendmail
3613 smmsp 20 0 57712 1648 504 S 0.0 0.2 0:00.01 sendmail
17610 root 20 0 85932 3312 2600 S 0.0 0.4 0:00.02 sshd
17612 mcmap 20 0 86072 1760 1012 S 0.0 0.2 0:00.17 sshd
17613 mcmap 20 0 12076 1656 1292 S 0.0 0.2 0:00.01 bash
17637 root 20 0 45052 1432 1120 S 0.0 0.2 0:00.00 su
17638 root 20 0 12180 1800 1324 S 0.0 0.2 0:00.08 bash
17740 root 20 0 246m 9264 4516 S 0.0 1.2 0:00.19 httpd
18264 Apache 20 0 282m 43m 4940 S 0.0 5.7 0:00.56 httpd
18514 Apache 20 0 279m 40m 4832 S 0.0 5.3 0:01.47 httpd
18518 Apache 20 0 273m 36m 4396 S 0.0 4.7 0:00.45 httpd
18528 Apache 20 0 251m 13m 3660 S 0.0 1.8 0:00.41 httpd
18529 Apache 20 0 278m 40m 4340 S 0.0 5.3 0:00.99 httpd
18530 Apache 20 0 278m 40m 4268 S 0.0 5.3 0:00.67 httpd
18548 Apache 20 0 272m 33m 3516 S 0.0 4.4 0:00.28 httpd
18552 Apache 20 0 280m 42m 3684 S 0.0 5.5 0:00.48 httpd
18553 Apache 20 0 271m 33m 3768 S 0.0 4.3 0:00.45 httpd
18555 Apache 20 0 274m 36m 3672 S 0.0 4.7 0:00.58 httpd
18572 Apache 20 0 247m 9020 2856 S 0.0 1.1 0:00.01 httpd
18578 Apache 20 0 280m 42m 3684 S 0.0 5.6 0:00.76 httpd
18589 Apache 20 0 246m 5452 676 S 0.0 0.7 0:00.00 httpd
18588 root 20 0 12624 1216 932 R 0.0 0.2 0:00.06
free -m
total used free shared buffers cached
Mem: 768 578 189 0 0 74
-/+ buffers/cache: 504 263
Swap: 0 0 0
Vient d’ajouter une image actuelle du résultat des cactus au cours des 4 dernières heures les périodes de pointe sont le lundi mardi. J'attendrai donc jusqu'à la semaine prochaine pour voir d'autres résultats du changement de configuration. mais cela ressemble à une amélioration car auparavant, je n'avais qu'un maximum de 10 fils disponibles. En regardant cela, tu penses que je peux faire plus d’amélioration?
free -m
total used free shared buffers cached
Mem: 768 619 148 0 0 49
-/+ buffers/cache: 570 197
Swap: 0 0 0
NOUVEAU TEST
Sur un boîtier VPS Ram de 2 Go, je suis maintenant réglé sur prefork sur
StartServers 20
MinSpareServers 20
MaxSpareServers 20
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 4000
aujourd'hui matin mon serveur memcache est mort de
Nov 20 09:28:40 vps22899094 kernel: Out of memory: Kill process 12517 (memcached) score 81 or sacrifice child
Nov 20 09:28:40 vps22899094 kernel: Killed process 12517, UID 497, (memcached) total-vm:565252kB, anon-rss:42940kB, file-rss:44kB
Quelles devraient être les valeurs optimales à définir dans Apache?
#/etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="1024"
OPTIONS="-l 127.0.0.1"
/etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
bind-address=127.0.0.1
#script
thread_concurrency=2
query_cache_size = 16M
query_cache_type=1
query_cache_limit=5M
# MyISAM #
#key-buffer-size = 32M
#myisam-recover = FORCE,BACKUP
# SAFETY #
#max-allowed-packet = 16M
#max-connect-errors = 1000000
# CACHES AND LIMITS #
tmp-table-size = 32M
max-heap-table-size = 32M
#query-cache-type = 0
#query-cache-size = 0
max-connections = 50
thread-cache-size = 16
#open-files-limit = 65535
#table-definition-cache = 1024
#table-open-cache = 2048
# INNODB #
#innodb-flush-method = O_DIRECT
#innodb-log-files-in-group = 2
#innodb-log-file-size = 5M
#innodb-flush-log-at-trx-commit = 1
#innodb-file-per-table = 1
#innodb-buffer-pool-size = 921M
# LOGGING #
log-error = /var/log/mysqld.log
log-queries-not-using-indexes = 1
slow-query-log = 1
slow-query-log-file = /var/log/mysqld-slow.log
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
Voici une approche qui pourrait résoudre votre problème et, dans le cas contraire, aiderait à la résolution des problèmes.
Créez un deuxième serveur virtuel Apache identique au serveur actuel
Envoie tout le trafic utilisateur "normal" au serveur virtuel d'origine
Envoi de trafic spécial ou de longue durée vers le nouveau serveur virtuel
Le trafic spécial ou de longue durée peut être la génération de rapports, les opérations de maintenance ou tout autre élément que vous ne prévoyez pas terminer en << 1 seconde. Cela peut arriver en servant des API, pas seulement des pages Web.
Si l'utilisation de vos ressources est faible mais que vous dépassez toujours MaxClients, la réponse la plus probable est que vos nouvelles connexions arrivent plus rapidement qu'elles ne peuvent être desservies. Mettre toute opération lente sur un deuxième serveur virtuel aidera à prouver que tel est le cas. Utilisez les journaux d’accès Apache pour quantifier l’effet.
Avez-vous envisagé d’utiliser nginx (ou un autre serveur Web basé sur des événements) au lieu d’apache?
nginx doit autoriser un nombre plus élevé de connexions et consommer beaucoup moins de ressources (car il est basé sur des événements et ne crée pas de processus séparé par connexion). Quoi qu'il en soit, vous aurez besoin de certains processus effectuant un travail réel (comme des serveurs WSGI ou autres) et s’ils restent sur le même serveur que le serveur Web frontal, vous ne faites que déplacer le problème de performances à un endroit légèrement différent.
La dernière version d'Apache doit autoriser une solution similaire (la configurer de manière événementielle), mais ce n'est pas mon domaine d'expertise.