web-dev-qa-db-fra.com

Apache consommant trop de CPU et de mémoire

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:

  • 8 Go de RAM;
  • 4 VCPUS (12GHz);

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:

  • Apache 2.2.22;
  • PHP 5.3.10 (le PHP est exécuté comme module Apache.);
  • APC 3.1.7;
  • Mysql 5.5.31 (toutes tables innodubes);

Je suis en cours d'exécution Modules Apache aussi. Regarde (apachectl -M):

  • core_module (statique)
  • log_config_module (statique)
  • logio_module (statique)
  • mpm_prefork_module (statique)
  • http_module (statique)
  • so_module (statique)
  • actions_module (partagée)
  • alias_module (partagé)
  • authZ_HOST_MODULE (partagé)
  • déflate_module (partagé)
  • dir_Module (partagé)
  • env_module (partagé)
  • inclure_module (partagé)
  • mime_module (partagé)
  • php5_module (partagé)
  • proxy_module (partagé)
  • proxy_http_module (partagé)
  • reqtimeout_module (partagé)
  • rewrite_module (partagé)
  • setenvif_module (partagé)
  • sSL_MODULE (partagé)
  • statut_Module (partagé)

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:

  • ACL 7.x-1.0
  • APC - Alternative PHP cache 7.x-1.0-beta4
  • Boost 7.x-1.0-beta2
  • Expiration du cache 7.x-2.0-bêta2
  • CAPTCHA 7.X-1.0
  • Suite Tool Chaos (CTools) 7.x-1.3
  • Date 7.x-2.6
  • Accès de domaine 7.x-3.10
  • Blocs de domaine 7.x-2.0
  • Domaine ctools 7.x-1.3
  • Domaine locale 7.x-1.0-beta3
  • Taxonomie de domaine 7.x-3.x-dev (2012-ABR-29)
  • Vues de domaine 7.x-1.5
  • Intégrer les vues Affichage 7.x-1.2
  • API d'entité 7.x-1.2
  • Référence d'entité 7.x-1.0
  • Imce 7.x-1.7
  • Imce mkdir 7.x-1.0
  • Internationalisation 7.x-1.10
  • Link 7.x-1.1
  • Mise à jour de localisation 7.x-1.0-beta3
  • Media 7.x-1.3
  • META Tags rapide 7.x-2.7
  • Newsletter 7.x-1.0-beta9
  • Élément d'options 7.x-1.9
  • Style de page 7.x-1.0
  • Panneaux 7.x-3.3
  • Pathauto 7.x-1.2
  • pathologic 7.x-2.11
  • profil2 7.x-1.3 + 0-dev (2013-MAI-24)
  • select_or_other 7.x-2.19
  • ficheNode 7.x-1.0-BETA4 + 3-DEV (2013-MAI-25)
  • Support d'authentification SMTP 7.x-1.0
  • Jeton 7.x-1.5
  • Translittération 7.x-3.1
  • Variable 7.x-2.3
  • Vues 7.x-3.7
  • Autorisations de vocabulaire par rôle 7.x-1.0
  • WebForm 7.x-3.19
  • Validation WebForm 7.x-1.2
  • workbench 7.x-1.2
  • workbench_access 7.x-1.2
  • workbench_media 7.x-1.1
  • workbench_profile 7.x-1.1
  • xMLSITEMAP 7.X-2.0-RC2

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.

5
Ricardo Giaviti

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:

  1. Vos demandes prennent environ 30 secondes pour servir!
  2. Votre taux de demande n'est pas très stable et la plupart des minutes que vous ne faites rien.

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.

0
Hari prabaharan