Connection time apache

55 réponses
AuteurMessage

Rano |
Modérateur

Photo de Rano

Inscrit le : 13/04/2005

# Le 05/01/2008 à 12:54

Salut,

J'ai un problème sur plusieurs serveurs. Parfois (genre une fois sur 20) la connexion (testée avec curl, c'est bien le "connection_time" qui est élevé) à apache est longue à s'établir. Entre 3 et 3,2 secondes (jamais plus, va savoir pourquoi) alors que d'habitude c'est moins d'1 ms.

Je vois pas ce qui peut bloquer :
- Load des serveurs entre 0,6 et 0,7
- Entre 100 et 150 connexions apache toujours disponibles (idle workers)
- Keep alive désactivé (obligé vu le nombre de connexion)
- Page demandée pour le test vide
- Ca se produit en testant depuis plusieurs machines


Une idée de paramètre à modifier ?
Merci et bon week end

Chambres d'hote tavelOuvrir dans une nouvelle fenetre
Séjours en provenceOuvrir dans une nouvelle fenetre
Forum mariageOuvrir dans une nouvelle fenetre

Bool | Olivier
Modérateur

Photo de Bool

Inscrit le : 09/05/2005

# Le 05/01/2008 à 14:43

Hello,

j'ai pratiquement le meme soucis avec un serveur MySQL.
Tout ce que je peux dire c'est que ça ressemble fortement à un soucis réseau.

On a essayé plein de trucs jusqu'à maintenant, mais ça n'a rien donné. J'ai l'impression que c'est une pile réseau ou un truc du genre qui sature : mais je n'ai pas l'impression que ce soit le conntrack de netfilter, et le nombre de connexion me semble trop faible pour que ce soit le nombre de ports TCP qui sature.

En tous cas si tu finis par trouver, je suis très preneur


PS : rien à voir mais pour les soucis de keepalive, si PHP n'est pas en mode module l'idéal est d'utiliser le MPM event.

daevel : infogérance et conseilOuvrir dans une nouvelle fenetre || moiOuvrir dans une nouvelle fenetre

MathieuC | Mathieu
Modérateur

Photo de MathieuC

Inscrit le : 15/07/2005

# Le 05/01/2008 à 15:00

Une demande de reverse qui prend du temps ?

Bool | Olivier
Modérateur

Photo de Bool

Inscrit le : 09/05/2005

# Le 05/01/2008 à 15:13

Pas dans mon cas : le reverse est désactivé coté serveur et il s'agit d'un mysql_connect( X.X.X.X ), sur un réseau local. La connexion à MySQL prend 1-2ms en temps normal, et de temps à autre on a une "vague" de connexions qui prennent entre 3000 et 3010ms.

Le seul moyen que j'ai trouvé pour reproduire ça est d'ouvrir un très grand nombre de connexions, les unes à la suite des autres. Et arrivé à 2000 connexions par seconde, ça craque rapidement...

daevel : infogérance et conseilOuvrir dans une nouvelle fenetre || moiOuvrir dans une nouvelle fenetre

Bool | Olivier
Modérateur

Photo de Bool

Inscrit le : 09/05/2005

# Le 05/01/2008 à 16:03

Je me suis fait un script PHP qui fait uniquement des fsockopen( 127.0.0.1, 3306 ) meme topo également : au bout d'un certain nombre de connexions, l'ouverture d'un socket prend 3 secondes (le script trace toutes les ouvertures qui durent plus de 500 ms ).

Ce n'est pas forcément la même cause, mais les symptomes sont les memes.

Edit : retesté à l'instant sur le port 80 d'une petite machine locale :
(Edit bis : j'ai remis le compteur de connexions à 0 à chaque erreur)

Timeout : 2.998234s
Error after 3.278212s and 3132 connections
Timeout : 3.001173s
Error after 6.286238s and 131 connections
Timeout : 3.001661s
Error after 9.310268s and 322 connections
Timeout : 3.001203s
Error after 12.318321s and 131 connections
Timeout : 3.002107s
Error after 15.342359s and 319 connections
Timeout : 3.001211s
Error after 18.350406s and 131 connections
Timeout : 3.002128s
Error after 21.374440s and 320 connections
Timeout : 3.001207s
Error after 24.382490s and 131 connections
Timeout : 3.003037s
Error after 27.406523s and 285 connections
Timeout : 3.001207s
Error after 30.414579s and 131 connections


Ces chiffres m'intriguent quand même...

(Message édité le 05-01-2008 à 16h10 par Bool)

daevel : infogérance et conseilOuvrir dans une nouvelle fenetre || moiOuvrir dans une nouvelle fenetre

Bool | Olivier
Modérateur

Photo de Bool

Inscrit le : 09/05/2005

# Le 06/01/2008 à 01:05

Si j'ai bien compris, le "lag" de 3 secondes pourrait venir de l'algo de gestion des "congestions" TCP. Par défaut Linux utilise le "BIC", et le joli timeout de 3 secondes vient de lui.

Ce qui me gène c'est que normalement cela ne se déclenche qu'en cas de perte de paquet réseau. Or j'ai du mal à voir pourquoi j'aurais des pertes via l'interface "lo"... si ce n'est le firewall qui débloque, ou encore une quelconque sécurité (l'anti syn flood ?)

daevel : infogérance et conseilOuvrir dans une nouvelle fenetre || moiOuvrir dans une nouvelle fenetre

Bool | Olivier
Modérateur

Photo de Bool

Inscrit le : 09/05/2005

# Le 06/01/2008 à 02:31

J'ai retesté entre deux machines distantes, et à chaque fois que la connexion de 3 secondes se produit le compteur "DelayedACKLost" est incrémenté de 1.

Lors de mon dernier test j'ai également eu :
- DelayedACKs qui augmente de 5
- TCPLossUndo qui augmente de 3
- TCPTimeouts qui augmente de 3 également
- TCPDSACKOldSent qui augmente de 1
- TCPDSACKRecv qui augmente de 7

Sinon :
- changer l'algo de congestion TCP sur le client et le serveur n'a rien réglé pour moi
- changer la valeur du tcp_retries (/proc/sys/net/ipv4/tcp_retries1 ) ne modifie pas la durée de ces connexions "lentes"

daevel : infogérance et conseilOuvrir dans une nouvelle fenetre || moiOuvrir dans une nouvelle fenetre

Rano | Jean
Modérateur

Photo de Rano

Inscrit le : 13/04/2005

# Le 06/01/2008 à 20:39

Je regarde toutes tes idées demain et test voir si ca résoud mon problème

Chambres d'hote tavelOuvrir dans une nouvelle fenetre
Séjours en provenceOuvrir dans une nouvelle fenetre
Forum mariageOuvrir dans une nouvelle fenetre

Rano | Jean
Modérateur

Photo de Rano

Inscrit le : 13/04/2005

# Le 06/01/2008 à 21:09

Ce sont des machines hébergées ou ? (Vu que tu dis que ca le fait en localhost, ca ne doit pas etre ça mais bon)

Sinon ca se produit sur des serveurs qui font autour des 30 Mbits mais sur un serveur recevant 4 fois plus de connections mais seulement 10 Mbits, y a pas de problème...

(Message édité le 06-01-2008 à 21h19 par Rano)

Chambres d'hote tavelOuvrir dans une nouvelle fenetre
Séjours en provenceOuvrir dans une nouvelle fenetre
Forum mariageOuvrir dans une nouvelle fenetre

Bool | Olivier
Modérateur

Photo de Bool

Inscrit le : 09/05/2005

# Le 06/01/2008 à 22:53

J'arrive à reproduire le problème avec des machines Sivit (réseau 100Mbit/s), ainsi qu'avec des machines "perso" sur un réseau gigabit.
Mais je suis tombé sur ce cas particulier en production chez MailClub (réseau 10Mbit/s).

Mais aucune de ces machines ne dépasse le megabit/s en temps normal.

daevel : infogérance et conseilOuvrir dans une nouvelle fenetre || moiOuvrir dans une nouvelle fenetre

Rano | Jean
Modérateur

Photo de Rano

Inscrit le : 13/04/2005

# Le 07/01/2008 à 09:11

Je viens de remarquer que le problème se produit sur "localhost", mais pas sur "127.0.0.1" chez moi, ni en inscrivant directement l'ip de la machine (en faisant des tests depuis la machine qui bug).

Ah si... mais bcp moins souvent

(Message édité le 07-01-2008 à 09h26 par Rano)

Chambres d'hote tavelOuvrir dans une nouvelle fenetre
Séjours en provenceOuvrir dans une nouvelle fenetre
Forum mariageOuvrir dans une nouvelle fenetre

Rano | Jean
Modérateur

Photo de Rano

Inscrit le : 13/04/2005

# Le 07/01/2008 à 17:47

Ca me gonfle . J'ai passé en revu plein de sites, variables de sysctl, firewall, conntrack et je trouve rien. J'ai l'impression qu'on est les deux seuls sur Terre a avoir rencontré ce pb, rien de précis sur le net !

Chambres d'hote tavelOuvrir dans une nouvelle fenetre
Séjours en provenceOuvrir dans une nouvelle fenetre
Forum mariageOuvrir dans une nouvelle fenetre

Rano | Jean
Modérateur

Photo de Rano

Inscrit le : 13/04/2005

# Le 07/01/2008 à 18:30

Sous quelles distribs tu as eu ce problème Bool ?

Moi sous Debian 4.0 64, je vais voir si le problème se pose en 32 bits et sur Debian 3...

Chambres d'hote tavelOuvrir dans une nouvelle fenetre
Séjours en provenceOuvrir dans une nouvelle fenetre
Forum mariageOuvrir dans une nouvelle fenetre

Bool | Olivier
Modérateur

Photo de Bool

Inscrit le : 09/05/2005

# Le 07/01/2008 à 19:16

Debian 4.0 64bits également... sur toutes les machines testées. Et testé avec au moins 2 kernels différents : 2.6.18-5-amd64 Debian, et 2.6.22-3-amd64 "maison".

J'ai collecté le résultat de "netstat -s" toutes les minutes pendant 48 heures, afin de vérifier en prod mon hypothèse du DelayedACKLost ; et si ça se confirme je demanderais sur "LinuxQuestions".

daevel : infogérance et conseilOuvrir dans une nouvelle fenetre || moiOuvrir dans une nouvelle fenetre

Rano | Jean
Modérateur

Photo de Rano

Inscrit le : 13/04/2005

# Le 07/01/2008 à 19:18

okay, j'ai mis un debian 32 bits pour voir mais tout ovh est dead depuis free sète :/

Chambres d'hote tavelOuvrir dans une nouvelle fenetre
Séjours en provenceOuvrir dans une nouvelle fenetre
Forum mariageOuvrir dans une nouvelle fenetre

Rano | Jean
Modérateur

Photo de Rano

Inscrit le : 13/04/2005

# Le 07/01/2008 à 21:08

En surfant j'ai vu que les tags pub.weborama.fr était lents. Donc j'ai testé avec le même script. Résultat :
Quand ca répond normalement : 100ms
Quand c'est lent 5 secondes... et toujours 5, pas 4 ni 6 mais toujours 5.

Quand as tu détecté ce souci bool ?

Chambres d'hote tavelOuvrir dans une nouvelle fenetre
Séjours en provenceOuvrir dans une nouvelle fenetre
Forum mariageOuvrir dans une nouvelle fenetre

Bool | Olivier
Modérateur

Photo de Bool

Inscrit le : 09/05/2005

# Le 07/01/2008 à 23:53

Nous ça fait bien 3 semaines que ça dure en prod... alléatoire pendant 1 ou 2 minutes, 1 à 3 fois par jour...

daevel : infogérance et conseilOuvrir dans une nouvelle fenetre || moiOuvrir dans une nouvelle fenetre

Bool | Olivier
Modérateur

Photo de Bool

Inscrit le : 09/05/2005

# Le 08/01/2008 à 11:59

mon dernier "brouillon" ressemble à ça :

<?php
error_reporting( E_ALL );


function time_exact()
{
$tmp = explode( ' ', microtime() );
return $tmp[1] . substr( $tmp[0], 1 );
}


$start_time = time_exact();
$count = 0;
$error = 0;
do
{
$connect_time = time_exact();
$sock = mysql_connect( 'X.X.X.X', 'xxxxxxxx', 'xxxxxxxx', true );
// $sock = fsockopen( 'X.X.X.X', 3306, $errno, $errstr, 10 );
if( ! $sock )
{
echo mysql_error(), PHP_EOL;
sleep( 5 );
// echo $errno, ' : ', $errstr, PHP_EOL;
$count = 0;
}
else
{
$end_time = time_exact();
$count++;
mysql_close( $sock );
// fclose( $sock );


$time = bcsub( $end_time, $connect_time, 6 );
if( $time > 0.5 )
{
$error ++;
echo 'Timeout : ', $time, 's', PHP_EOL;

echo 'Error after ', bcsub( $end_time, $start_time, 6 ), 's and ',
$count , ' connections', PHP_EOL;
$count = 0;
}
}

if( $count > 0 and ( $count % 1000 === 0 ) ) echo $count, PHP_EOL;

} while( $error < 10 );

?>

daevel : infogérance et conseilOuvrir dans une nouvelle fenetre || moiOuvrir dans une nouvelle fenetre

Rano | Jean
Modérateur

Photo de Rano

Inscrit le : 13/04/2005

# Le 08/01/2008 à 13:23

C'est vraiment la grosse loose... Aussi bien sur des serveurs avec seulement apache ou seulement mysql ou seulement memcache, des serveurs qui load à 0,9 ou 0,5 ou 0,2 le problème est là. Qu'il yait 20k lignes dans netstats ou 5, c'est pareil. Ca fait tout merder ces ralentissements...

Le 32 bits n'a rien changé, je repasse à debian 3 pour voir...

Chambres d'hote tavelOuvrir dans une nouvelle fenetre
Séjours en provenceOuvrir dans une nouvelle fenetre
Forum mariageOuvrir dans une nouvelle fenetre

Bool | Olivier
Modérateur

Photo de Bool

Inscrit le : 09/05/2005

# Le 08/01/2008 à 13:51

Sur un kernel Debian essaye ça pour voir :

echo htcp > /proc/sys/net/ipv4/tcp_congestion_control


Je n'en suis pas encore certain à 100%, mais aujourd'hui j'ai l'impression que ça règle les soucis.
(je ne l'avais peut être pas activé sur les deux machines...)

daevel : infogérance et conseilOuvrir dans une nouvelle fenetre || moiOuvrir dans une nouvelle fenetre

Répondre

Vous ne pouvez pas participer au forum, car votre inscription n'a pas été validée. Pour vous faire valider en tant que Membre, cliquez ici.

© MHN - Tous droits réservés | CNIL N°844440 | 24/11/2024 12:26:22 | Généré en 13.01ms | Contacts | Mentions légales |