J'ai des problèmes avec la CPU chargant une mémoire avec Apache Web Server.
Nous exécutons A Ubuntu Server 12.04 LTS sur une machine virtuelle. Notre serveur a les spécifications suivantes:
Nous avons configuré le serveur pour exécuter un site web Drupal (7.23) basé. Nous avons donc installé Apache, PHP, MySQL ... Les versions sont ci-dessous:
Je suis en cours d'exécution Modules Apache aussi. Regarde (apachectl -M
):
Sur apache2.conf, nous avons cette configuration:
Timeout 90
KeepAlive On
MaxKeepAliveRequests 80
KeepAliveTimeout 5
HostnameLookups Off
LogLevel warn
<IfModule mpm_prefork_module>
StartServers 10
MinSpareServers 10
MaxSpareServers 30
MaxClients 120
MaxRequestsPerChild 1000
</IfModule>
The hôte virtuel de mon site:
<VirtualHost *:80>
ServerName blabla.bla.bla
ServerAdmin [email protected]
DocumentRoot /l/disk0/site/public_html
<Directory />
AllowOverride None
</Directory>
<Directory /l/disk0/site/public_html>
Options MultiViews Indexes Includes FollowSymLinks ExecCGI
AllowOverride All
Order allow,deny
allow from all
</Directory>
LogLevel warn
ErrorLog "/l/disk0/site/logs/Apache/site/error.log"
CustomLog "/l/disk0/site/logs/Apache/sit/access.log" combined
SSLProxyEngine on
RewriteEngine on
RewriteLog logs/rewrite_www_log
RewriteLogLevel 0
Include rewrites-www.conf
</VirtualHost>
Modules Drupal:
Mon site est simple et n'a pas beaucoup de visiteurs. Je parle de 500 visiteurs par jour peut-être. Drupal peut-il causer tant de chargement de la CPU? Ou un module?
L'utilisation de la mémoire est autre problème. Lorsqu'un processus est créé, 80M est attribué à Apache2. Je pense que c'est trop.
Mon problème est que la CPU (tous les noyaux) a une charge élevée. La plupart du temps, frapper entre 90% et 100% de charge! Le processus incriminé est l'apache2. La mémoire est également consommée sans pitié. D'un total de 8 Go, la mémoire consommée est d'environ 6.5 Go à 7,5 Go. Je ne sais pas si ma configuration Apache est fausse ou si j'ai vraiment besoin de plus de matériel (je suppose que non). Drupal peut causer une charge de processeur élevée?
Lorsque la charge de la CPU frappe 100%, le site diminue et nous devons redémarrer Apache. J'ai fait une solution de contournement avec Drupal à l'aide de l'APC et d'installer Boost. Avait une certaine efficacité, mais la charge de la CPU est toujours élevée. Très élevé.
Si vous avez besoin de plus d'informations, comme Drupal modules et PHP Extensions. S'il vous plaît faites le moi savoir.
L'utilisation de la mémoire est autre problème. Lorsqu'un processus est créé, 80M est attribué à Apache2. Je pense que c'est trop.
Est-ce que cette mémoire réelle ou virtuelle? Honnêtement, ce n'est pas beaucoup; Plus précisément, vous devriez vous concentrer sur la réparation de choses qui causent des problèmes, pas seulement des choses que vous "pensez" devraient être différentes.
Si vous souhaitez que les processus Apache prennent moins de mémoire, vous devez désactiver les modules (car chacun est davantage de code qui doit être en mémoire). Mais si vous avez besoin de tous les modules que vous avez activés, alors bien, c'est ça.
Une approche que j'ai utilisée lors de l'administration d'une machine à contrainte de mémoire consistait à déplacer certaines tâches à partir d'Apache et à d'autres serveurs afin que je puisse les accorder séparément.
Mais une approche beaucoup plus simple est de changer
MaxClients 120
à quelque chose de plus raisonnable pour votre charge de travail:
Si nous considérons les accès en réécriture et le trafic principal du site, nous avons environ 70 demandes par minute. À l'heure actuelle, nous avons 33 connexions entrantes.
Je reviendrai sur ça momentanément, mais si vous ne faites que traiter avec 33 demandes simultanées, vous n'avez pas besoin de 120 travailleurs!
MaxClients 40
Et vous devriez probablement syntoniser MinSpareServers
et MaxSpareServer
à quelque chose comme 5 et 10, respectivement. Il n'y a pas besoin d'avoir 30 travailleurs assis autour de ne rien faire.
Maintenant, revenir à
Si nous considérons les accès en réécriture et le trafic principal du site, nous avons environ 70 demandes par minute. À l'heure actuelle, nous avons 33 connexions entrantes.
Si vous avez 33 demandes simultanées, mais vous ne faites que 70 une minute, il y a quelques possibilités:
Si le n ° 1 est le cas, je ne sais pas vraiment comment aider - quelque chose est incroyablement mal, si mal, je ne sais même pas où vous devez vous dire de commencer à regarder.
Si c'est n ° 2, je suppose que vous servez tous vos actifs statiques (images, JS, CSS, polices) de votre serveur. Il est préférable de les mettre sur un CDN, mais si vous ne pouvez vraiment pas faire cela, vous pouvez définir des temps de cache super long sur eux et transformer le vernis sur. Si vous utilisez des processus Apache avec PHP et une foule entière d'autres choses simplement pour servir des fichiers statiques, vous gaspillez des ressources - faites-le avec quelque chose de plus simple!
Mon problème est que la CPU (tous les noyaux) a une charge élevée. La plupart du temps, frapper entre 90% et 100% de charge! Le processus incriminé est l'apache2.
Est-ce un nombre constant ou seulement lorsque vous servez des demandes?
Comment l'aspect d'E/S du disque (iostat -mhx 2
)? Que fait mysql (show processlist;
)?
Votre serveur est considérablement maîtrisé pour ce que vous avez décrit. C'est une bonne nouvelle, car cela signifie que vous devriez pouvoir résoudre ce problème.
J'ai confronté le même problème. Téléchargez votre contenu Web dans votre machine locale et numérisez le contenu avec l'anti-virus mis à jour. Dans mon cas, le coupable est le virus de Trojan. Après avoir nettoyé le virus dans mon contenu Web, mon problème a été résolu.