web-dev-qa-db-fra.com

J'ai mis mon serveur en panne, comment puis-je savoir ce qui s'est passé?

À partir d’une machine distante, j’ai exécuté 100 demandes simultanées sur mon VPS Ubuntu.

ab -n 100 -c 100 http://...

Et, comme je m'en doutais, le serveur "s'est écrasé". Je peux toujours faire un ping, et il répond très rapidement (~ 50ms). Mais je ne peux pas ssh ni accéder au serveur Web. J'ai déjà effectué 1000 demandes avec 10 demandes simultanées auparavant, et le système a répondu rapidement et de manière fiable, à environ 80 demandes par seconde.

Avance rapide de cinq minutes et je peux me connecter, le serveur Web fonctionne très bien, tout est à nouveau parfait.

  • Uptime me dit que load_average est 0.06, 0.04, 0.05, et il me reste un quart de gigaoctet de mémoire libre (sur 512 Mo). Lancer netstat -n me donne beaucoup, beaucoup de lignes comme celles-ci:

    tcp        0      0 127.0.0.1:9311          127.0.0.1:35030         TIME_WAIT  
    tcp        0      0 127.0.0.1:5984          127.0.0.1:54384         TIME_WAIT  
    tcp        0      0 127.0.0.1:9311          127.0.0.1:35024         TIME_WAIT
    
  • Le serveur exécute nginx en tant que proxy inverse, avec une poignée de serveurs cherrypy derrière lui. Ces serveurs fonctionnent sur des ports compris entre 8 000 et 9 000 et n'écoutent que 127.0.0.1.

100 demandes simultanées ne me semblent pas beaucoup, même s'il s'agit du serveur de spécifications minimum absolu proposé par ma société d'hébergement. Comment puis-je enquêter sur ce qui est arrivé lorsque le serveur est tombé en panne?


Le serveur n'a pas redémarré après le crash. Aucun message n'a été écrit sur mon kern.log et il n'y a pas de pare-feu devant le serveur.

5
Stefano Palazzo

Vous devez installer quelque chose qui enregistre les données de performance de votre système et l'exécuter pendant que vous effectuez ces tests. collectd est très populaire pour cela, mais nécessitera un apprentissage lourd à l’avance. Vous pouvez installer 'sysstat' pour obtenir la commande 'sar', mais la granularité n'est que de 10 minutes et ne risque donc pas de résoudre tous les problèmes. Vous pouvez également vous connecter et exécuter quelque chose comme 'vmstat 5' qui affichera des statistiques sur IO/chargement/mémoire toutes les 5 secondes.

100 est beaucoup pour un petit serveur si vous utilisez Apache (par défaut) avec Apache (par défaut) avec PHP .. car cela nécessitera 100 processus simultanés pour satisfaire les demandes. Si vous avez défini MaxClients inférieur à 100, les demandes seront sauvegardées dans une file d'attente et deviendront très lentes. C'est probablement préférable à un crash total du système cependant.

3
SpamapS