Apache cesse d'interagir S. memcache Après avoir créé trop d'hôtes
J'ai remarqué un problème très spécifique avec Apache. J'ai un très grand nombre d'hôtes virtuels - près 501.
Les problèmes ont commencé après un numéro d'hôte virtuel 493. Première 493 Travaux d'hôte virtuel, comme prévu, mais dès que j'ajoute une salle d'hôte virtuelle 494, PHP cesse d'interagir S. memcache, et le temps d'attente expire chaque fois la lecture / Record.
En fait, j'utilise memcache comme stockage des sessions de backend, donc la fonction php:
Expire simplement 30 secondes.
Si je supprime un aléatoire de 494 Hôtes et redémarrage apache, Il commencera à travailler à nouveau.
J'ai installé très haut ulimit (65k), Mais cela n'aide pas. J'ai essayé de désactiver complètement ulimits, Mais pas chanceux.
Avez-vous des idées sur quoi d'autre puis-je essayer?
J'ai essayé d'explorer le processus httpd, À laquelle je suis connecté, après avoir appuyé sur la touche d'entrée du navigateur et à travers 30 Secondes commence à attendre.
C'est le résultat strace:
Donc, principalement apache collé sur select (), Et tout, il répète infiniment le défi du système select ().
La prochaine chose que j'ai proposée - c'est tcpdump, Pour voir si le paquet passe vraiment à travers apache, Et en effet c'est:
La prochaine chose que j'ai faite - c'est GDB Traiter Apache, Quand j'effectue un défi curl Pour une page contenant session_start (), Et c'est le résultat:
Dans cet endroit une grande pause (~ 30 Secondes), jusqu'à php n'expirera pas. Après cela, j'ai eu ceci:
La chose la plus étrange que je ne peux pas le reproduire sur une autre voiture. Le même système d'exploitation, les mêmes packages, la même configuration (fantoche), Le même noyau, autre HW.
</value></value>
Les problèmes ont commencé après un numéro d'hôte virtuel 493. Première 493 Travaux d'hôte virtuel, comme prévu, mais dès que j'ajoute une salle d'hôte virtuelle 494, PHP cesse d'interagir S. memcache, et le temps d'attente expire chaque fois la lecture / Record.
En fait, j'utilise memcache comme stockage des sessions de backend, donc la fonction php:
session_start();
Expire simplement 30 secondes.
Si je supprime un aléatoire de 494 Hôtes et redémarrage apache, Il commencera à travailler à nouveau.
J'ai installé très haut ulimit (65k), Mais cela n'aide pas. J'ai essayé de désactiver complètement ulimits, Mais pas chanceux.
Avez-vous des idées sur quoi d'autre puis-je essayer?
J'ai essayé d'explorer le processus httpd, À laquelle je suis connecté, après avoir appuyé sur la touche d'entrée du navigateur et à travers 30 Secondes commence à attendre.
C'est le résultat strace:
select(1170, [1024 1169], [], NULL, {1, 0}) = 2 (in [1024 1169], left {0, 999998})
select(1170, [1024 1169], [], NULL, {1, 0}) = 2 (in [1024 1169], left {0, 999998})
select(1170, [1024 1169], [], NULL, {1, 0}) = 2 (in [1024 1169], left {0, 999998})
select(1170, [1024 1169], [], NULL, {1, 0}) = 2 (in [1024 1169], left {0, 999998})
select(1170, [1024 1169], [], NULL, {1, 0}) = 2 (in [1024 1169], left {0, 999998})
Donc, principalement apache collé sur select (), Et tout, il répète infiniment le défi du système select ().
La prochaine chose que j'ai proposée - c'est tcpdump, Pour voir si le paquet passe vraiment à travers apache, Et en effet c'est:
22:11:28.366677 IP6 ::1.51404 > ::1.11914: Flags [S], seq 2899674987, win 32752, options [mss 16376,sackOK,TS val 1384759049 ecr 0,nop,wscale 9], length 0
22:11:28.366697 IP6 ::1.11914 > ::1.51404: Flags [S.], seq 2034630080, ack 2899674988, win 32728, options [mss 16376,sackOK,TS val 1384759049 ecr 1384759049,nop,wscale 9], length 0
22:11:28.366709 IP6 ::1.51404 > ::1.11914: Flags [.], ack 1, win 64, options [nop,nop,TS val 1384759049 ecr 1384759049], length 0
22:11:28.366752 IP6 ::1.51404 > ::1.11914: Flags [P.], seq 1:41, ack 1, win 64, options [nop,nop,TS val 1384759049 ecr 1384759049], length 40
22:11:28.366758 IP6 ::1.11914 > ::1.51404: Flags [.], ack 41, win 64, options [nop,nop,TS val 1384759049 ecr 1384759049], length 0
22:11:28.366768 IP6 ::1.51404 > ::1.11914: Flags [P.], seq 41:90, ack 1, win 64, options [nop,nop,TS val 1384759050 ecr 1384759049], length 49
22:11:28.366772 IP6 ::1.11914 > ::1.51404: Flags [.], ack 90, win 64, options [nop,nop,TS val 1384759050 ecr 1384759050], length 0
22:11:28.366779 IP6 ::1.51404 > ::1.11914: Flags [P.], seq 90:122, ack 1, win 64, options [nop,nop,TS val 1384759050 ecr 1384759050], length 32
22:11:28.366783 IP6 ::1.11914 > ::1.51404: Flags [.], ack 122, win 64, options [nop,nop,TS val 1384759050 ecr 1384759050], length 0
22:11:28.367063 IP6 ::1.11914 > ::1.51404: Flags [P.], seq 1:12, ack 122, win 64, options [nop,nop,TS val 1384759050 ecr 1384759050], length 11
22:11:28.367070 IP6 ::1.51404 > ::1.11914: Flags [.], ack 12, win 64, options [nop,nop,TS val 1384759050 ecr 1384759050], length 0
22:11:28.367266 IP6 ::1.11914 > ::1.51404: Flags [P.], seq 12:20, ack 122, win 64, options [nop,nop,TS val 1384759050 ecr 1384759050], length 8
22:11:28.367275 IP6 ::1.51404 > ::1.11914: Flags [.], ack 20, win 64, options [nop,nop,TS val 1384759050 ecr 1384759050], length 0
22:11:28.367477 IP6 ::1.11914 > ::1.51404: Flags [P.], seq 20:25, ack 122, win 64, options [nop,nop,TS val 1384759050 ecr 1384759050], length 5
22:11:28.367489 IP6 ::1.51404 > ::1.11914: Flags [.], ack 25, win 64, options [nop,nop,TS val 1384759050 ecr 1384759050], length 0
22:11:28.367629 IP6 ::1.51404 > ::1.11914: Flags [P.], seq 122:181, ack 25, win 64, options [nop,nop,TS val 1384759050 ecr 1384759050], length 59
22:11:28.367859 IP6 ::1.11914 > ::1.51404: Flags [P.], seq 25:33, ack 181, win 64, options [nop,nop,TS val 1384759051 ecr 1384759050], length 8
22:11:28.367869 IP6 ::1.51404 > ::1.11914: Flags [P.], seq 181:230, ack 33, win 64, options [nop,nop,TS val 1384759051 ecr 1384759051], length 49
22:11:28.368102 IP6 ::1.11914 > ::1.51404: Flags [P.], seq 33:41, ack 230, win 64, options [nop,nop,TS val 1384759051 ecr 1384759051], length 8
22:11:28.368138 IP6 ::1.51404 > ::1.11914: Flags [F.], seq 230, ack 41, win 64, options [nop,nop,TS val 1384759051 ecr 1384759051], length 0
22:11:28.368195 IP6 ::1.11914 > ::1.51404: Flags [F.], seq 41, ack 231, win 64, options [nop,nop,TS val 1384759051 ecr 1384759051], length 0
22:11:28.368206 IP6 ::1.51404 > ::1.11914: Flags [.], ack 42, win 64, options [nop,nop,TS val 1384759051 ecr 1384759051], length 0
La prochaine chose que j'ai faite - c'est GDB Traiter Apache, Quand j'effectue un défi curl Pour une page contenant session_start (), Et c'est le résultat:
232 *(*new)->local_addr = *sock->local_addr;
241 if (sock->local_addr->sa.sin.sin_family == AF_INET) {
238 (*new)->local_addr->pool = connection_context;
241 if (sock->local_addr->sa.sin.sin_family == AF_INET) {
238 (*new)->local_addr->pool = connection_context;
241 if (sock->local_addr->sa.sin.sin_family == AF_INET) {
245 else if (sock->local_addr->sa.sin.sin_family == AF_INET6) {
246 (*new)->local_addr->ipaddr_ptr = &(*new)->local_addr->sa.sin6.sin6_addr;
249 (*new)->remote_addr->port = ntohs((*new)->remote_addr->sa.sin.sin_port);
250 if (sock->local_port_unknown) {
256 if (apr_is_option_set(sock, APR_TCP_NODELAY) == 1) {
257 apr_set_option(*new, APR_TCP_NODELAY, 1);
266 if (sock->local_interface_unknown ||
267 !memcmp(sock->local_addr->ipaddr_ptr,
266 if (sock->local_interface_unknown ||
276 (*new)->local_interface_unknown = 1;
293 apr_pool_cleanup_register((*new)->pool, (void *)(*new), socket_cleanup,
292 (*new)->inherit = 0;
293 apr_pool_cleanup_register((*new)->pool, (void *)(*new), socket_cleanup,
296 }
unixd_accept (accepted=0x7fff14ecddf0, lr=0x7fe93a905aa8, ptrans=<value optimized="" out="">) at /usr/src/debug/httpd-2.2.15/os/unix/unixd.c:507
507 if (status == APR_SUCCESS) {
508 *accepted = csd;
649 }
child_main (child_num_arg=<value optimized="" out="">) at /usr/src/debug/httpd-2.2.15/server/mpm/prefork/prefork.c:650
650 SAFE_ACCEPT(accept_mutex_off()); /* unlock after "accept" */
652 if (status == APR_EGENERAL) {
656 else if (status != APR_SUCCESS) {
665 current_conn = ap_run_create_connection(ptrans, ap_server_conf, csd, my_child_num, sbh, bucket_alloc);
666 if (current_conn) {
667 ap_process_connection(current_conn, csd);
Dans cet endroit une grande pause (~ 30 Secondes), jusqu'à php n'expirera pas. Après cela, j'ai eu ceci:
668 ap_lingering_close(current_conn);
676 if (ap_mpm_pod_check(pod) == APR_SUCCESS) { /* selected as idle? */
680 ap_scoreboard_image->global->running_generation) { /* restart? */
679 else if (ap_my_generation !=
680 ap_scoreboard_image->global->running_generation) { /* restart? */
679 else if (ap_my_generation !=
551 while (!die_now && !shutdown_pending) {
559 apr_pool_clear(ptrans);
562 && requests_this_child++ >= ap_max_requests_per_child)) {
561 if ((ap_max_requests_per_child > 0
562 && requests_this_child++ >= ap_max_requests_per_child)) {
561 if ((ap_max_requests_per_child > 0
562 && requests_this_child++ >= ap_max_requests_per_child)) {
561 if ((ap_max_requests_per_child > 0
566 (void) ap_update_child_status(sbh, SERVER_READY, (request_rec *) NULL);
573 SAFE_ACCEPT(accept_mutex_on());
575 if (num_listensocks == 1) {
La chose la plus étrange que je ne peux pas le reproduire sur une autre voiture. Le même système d'exploitation, les mêmes packages, la même configuration (fantoche), Le même noyau, autre HW.
</value></value>
Aucun résultat connexe trouvé
Invité:
Pour répondre aux questions, connectez-vous ou registre
1 réponses
Dominique
Confirmation de:
Je vais essayer de le réparer, mais, oh mon Dieu, pourquoi les gars de PHP Alors font-ils? C'est tellement laide et le codage rigide du nombre de numéros de fichier - Conception entièrement brisée. Sans oublier que s'il s'agit d'une décision, faites-moi de recompiler chaque version secondaire PHP et correction de la sécurité et entretiennent leurs propres forfaits - C'est un gros problème.
EDIT: Après plus de débogage étendu, il semble que non seulement PHP "Design brisé", il y a aussi un tas de problèmes avec l'extension elle-même memcache.
https://bugs.debian.org/cgi-bi ... 29896
https://bugs.php.net/bug.php?id=59876
Les erreurs sont ouvertes depuis assez longtemps, et rien ne se passe. Je pense que c'est juste pour réinitialiser l'expansion memcache Et trouver une décision indépendante: - /