Apache pas assez de mémoire sur

j'ai VPS de 768 MB de RAM et de processeur 1,13 GHz. J'ai un site de rencontre php / mysql, La performance est excellente et la charge sur le serveur est généralement très faible.

Parfois, je posterai de la publicité dans Facebook, Et aux heures de pointe, je peux obtenir 100-150 Clique sur quelques secondes - Cela conduit à une pénurie de mémoire sur le serveur:

Il est impossible d'allouer la mémoire: Impossible de créer un processus d'enfant: / opt / suphp / sbin / suphp ....

Et tous les utilisateurs ont une erreur 500 page.

Je me demande juste, cela semble raisonnable ou pas - tome 100-150 ne semble pas être un nombre qui devrait causer apache manque de mémoire.

Aucun conseil / Les recommandations de diagnostic de problèmes sont les bienvenues.
Invité:

Christine

Confirmation de:

L'optimisation du volume de la mémoire est généralement obtenue en réduisant (et restrictions) Les facteurs suivants:

Nombre de processus simultanés Apache (Je recommanderais de passer à une version préliminaire MPM, Qui est en partie plus gérable dans un environnement de limite de mémoire)

Se démarquer mod_php ou php_cgi à fastcgi, mod_cfgid fonctionne bien. Réduire le nombre de processus générés autorisés php par FcgidMaxProcesses et enlèvement de longs timesouts (cm.
http://httpd.apache.org/mod_fc ... .html
)

"Sombre" Les serveurs, en particulier en raison de la réduction des délais d'attente inutilement longtemps ((Coupure) Temps de connexion, messages d'assistance d'activité, ...)

Si la charge devient vraiment grande, vous devez également explorer la vitesse de traitement de la vitesse (Le chargement plus rapide améliore la taille totale * Temps de mémoire requis pour une demande)

Optimisation de votre code de site Web (améliorer le code PHP pour être plus rapide et / ou plus efficace en mémoire)

Optimisation de l'exécution PHP (xcache peut accélérer le travail plusieurs fois)

La mise en cache des demandes entière travaille également des merveilles, voir mod_cache

Possible si votre site Web ne charge pas du tout le processeur et que vous avez besoin d'extrême Req / S, Essayez un autre serveur Web (par exemple, nginx ou lighttpd), Ce qui se comporte mieux dans de telles situations.

Catherine

Confirmation de:

La première chose à faire est de mettre votre système actuel dans l'ordre. Défaut apache Généralement configuré avec plusieurs extensions que vous n'avez probablement pas besoin de (en particulier, auth et proxy, Aussi si vous utilisez SSL, Mais seulement occasionnellement, alors envisagez l'enlèvement mod_ssl et lancement stunnel au lieu de cela). Allumer mod_deflate. Regardez tout ce qui fonctionne sur votre système - Éteindre (et désactiver) Tous les services que vous n'avez pas besoin.

Suivant, commencez suphp sur la machine mise en surbrillance à travers CGI Habituellement une idée très stupide - Utilisation mod_php ou fastCGI.

Accélérer le travail de votre système, vous améliorez non seulement la maintenance de vos clients, mais également réduire la quantité de mémoire. Alors....

Installez le cache de code de transaction PHP, Si vous l'avez encore.

Commencer à creuser dans les performances de votre système - Changer la configuration httpd, Pour commencer l'enregistrement%% D, et regarder le travail de la fréquence de l'URL et% D, Déterminer quelles URL provoquent le plus de problèmes.

Réduire le seuil dans le magazine des demandes lentes à MySQL - Utilise le
http://www.retards.org/projects/mysql/
ou de la même manière d'analyser les données (Veuillez noter que de nouveau, vous devez organiser des priorités en fonction du travail de la fréquence et du temps d'exécution.).

Ajouter une addition automatique pour activer la compression tampon de sortie gz.

Commencez à écrire le nombre de processus en cours d'exécution httpd et comparez-le avec un cache plus petit abordable / tampons de "gratuit" - comparer les données et les décrire pour déterminer le nombre de processus httpd Vous pouvez judicieusement courir - Puis changez votre httpd.conf, Pour assurer cette limite. Notez que l'entrée de disque

Phénoménal

lent - Ainsi, pour la mise en cache est nécessaire suffisamment de mémoire.

Commencez à regarder si votre serveur fournit de bonnes informations sur la mise en cache avec le contenu - Ou les clients et les procurations doivent continuer à revenir pour des choses qui n'ont pas changé (mod_expires, mod_headers)

Mais parfois, vous avez juste besoin de plus d'équipement. Je recommanderais de penser au deuxième serveur et non seulement à mettre à jour celui que vous avez - Ajouter cyclique DNS de façon triviale - Et vous obtiendrez un avantage supplémentaire sous la forme d'une meilleure disponibilité. (Une fois que vous avez découvert comment gérer la réplication de la base de données) .

Christine

Confirmation de:

Exigence de mémoire pour chaque instance Apache est à propos 10 MB, bien que la quantité exacte dépend de votre configuration. Donc, si vous voulez servir 100 Connexions simultanées C. Apache, Vous aurez besoin au moins 1 GB RAM Plus tout ce qui est nécessaire par le système, MySQL Et le reste que vous utilisez.

Si vous souhaitez arrêter le statut "hors d'erreur", vous pouvez configurer

MaxClients

Paramètre de configuration Apache au niveau approprié. Pour obtenir une estimation de la mémoire pour chaque instance Apache, Voir

top

apporter et soustraire des colonnes RES et SHR Toutes les équipes httpd. Assurez-vous de déduire toute la mémoire requise MySQL et le reste du système. Veuillez noter que vous pouvez obtenir une quantité relativement petite. MaxClients Sur cette machine (30-50).

D'autres réponses ont donné un bon résumé que vous pouvez faire pour améliorer le nombre de requêtes simultanées que vous pouvez traiter. N'oubliez pas que sur un système aussi jeune peut être difficile, bien que ce ne soit pas nécessairement impossible, d'adapter Apache / PHP / MySQL un plus lighttpd / nginx / memcached / caching. À quel point dépendra ou difficile dépendra de votre application et de votre performance cible. Pensez à passer à un serveur plus grand ... Vous serez beaucoup plus facile de collecter tout ce dont vous avez besoin pour 2 ou 4 Gb

Emilie

Confirmation de:

Conduire le trafic de pointe est difficile. Les alternatives incluent: serveur HTTP plus facile (lighttpd, nginx et etc.); Plus physique RAM; équilibrage de la charge et hôtes supplémentaires, ce qui donne un avantage supplémentaire sous forme de disponibilité supérieure; Déchargement du code de l'application dans le système, séparément de votre serveur HTTP, généralement à travers FastCGI; Allocation dynamique des ressources informatiques pour satisfaire la charge via le service de cloud, telle que EC2; Ou des tonnes d'autres idées que j'ai oublié ou ne sont pas venues. Il y a plusieurs excellentes ressources à ce sujet; dans
http://highscalability.com/
Blog, par exemple, couvre la plupart de ce territoire. J'espère que cela aidera!

Pour répondre aux questions, connectez-vous ou registre