J'ai d=E9velopp=E9 un serveur en C (sockets et multithread) pour g=E9rer
des jeux multijoueurs jouable sur le net. Apr=E8s plusieurs tests en
local pour tester sa r=E9sistance, je le met en production (sur un
serveur de chez ovh =E0 base de red-hat pour info).
Le serveur est donc fonctionnelle mais quelques heures plus tard, celui
ci est arr=EAt=E9 brusquement. Je ne peux m=EAme pas savoir si il a
plant=E9 car je n'ai pas d'erreur dans mon fichier de log, et m=EAme en
redirigeant stdin et stderr dans un fichier en lancant le serveur,
celui ci s'arr=EAte au bout d'un moment mais je n'ai pas de message
d'erreur sp=E9cifique. Ce n'est pas un signal SIGTERM qui fait fermer
mon serveur car sinon j'en aurais une trace dans mon fichier de log.
C'est emb=EAtant car je n'ai pas d'info sur ce qui pourrait arr=EAter
(faire planter) mon serveur.
Je l'ai lanc=E9 avec 'gdb' en redirigeant la sortie dans un fichier. Une
fois le serveur arr=EAt=E9 de nouveau (contre mon gr=E9), je regarde la
sortie de gdb et ca s'est arr=EAt=E9 en plein milieu d'une ligne, genre :
"New Thread (LWP 1...." et plus rien, et pas de message d'erreur ou
autre.
Aussi j'aimerais savoir si je pourrais avoir un moyen de conna=EEtre
plus d'informations sur les raisons de cet arr=EAt.
Si vous connaissez un soft ou quelquechose =E0 essayer pour avancer dans
mon probl=E8me, merci d'avance.
Le serveur est donc fonctionnelle mais quelques heures plus tard, celui ci est arrêté brusquement.
Peut-être un quota ou une limite pour l'utilisateur. Enfin, je dis ça, c'est juste le premier truc qui me fiens à l'esprit.
-- http://patrick.davalan.free.fr/
d4r0k1n
Merci je suis en train de chercher si il y a des limitations au niveau du nombre de threads ou autre sur les serveurs dédiés OVH.
Mais c'est bien mon serveur (soft) qui plante (ou quitte ?), le serveur (hard) lui n'a pas de probleme. Ce que je ne comprends, c'est que je ne récupère pas le moindre message d'erreur ou autre...
Je précise aussi que le serveur (soft) fait des requete SQL via lmysqlclient dans une thread et ceci toutes les secondes...Mais je ne peux pas savoir d'où vient la source de mon problème...
Quelqu'un saurait si je peux avoir des chances de capter un message d'erreur ou autre en lancant mon serveur avec 'gdb' et certaines options ? Ou encore un autre débuggeur ? Ou un fichier de log qui me donnerai la moindre information ?
Merci je suis en train de chercher si il y a des limitations au niveau
du nombre de threads ou autre sur les serveurs dédiés OVH.
Mais c'est bien mon serveur (soft) qui plante (ou quitte ?), le serveur
(hard) lui n'a pas de probleme. Ce que je ne comprends, c'est que je ne
récupère pas le moindre message d'erreur ou autre...
Je précise aussi que le serveur (soft) fait des requete SQL via
lmysqlclient dans une thread et ceci toutes les secondes...Mais je ne
peux pas savoir d'où vient la source de mon problème...
Quelqu'un saurait si je peux avoir des chances de capter un message
d'erreur ou autre en lancant mon serveur avec 'gdb' et certaines
options ? Ou encore un autre débuggeur ? Ou un fichier de log qui me
donnerai la moindre information ?
Merci je suis en train de chercher si il y a des limitations au niveau du nombre de threads ou autre sur les serveurs dédiés OVH.
Mais c'est bien mon serveur (soft) qui plante (ou quitte ?), le serveur (hard) lui n'a pas de probleme. Ce que je ne comprends, c'est que je ne récupère pas le moindre message d'erreur ou autre...
Je précise aussi que le serveur (soft) fait des requete SQL via lmysqlclient dans une thread et ceci toutes les secondes...Mais je ne peux pas savoir d'où vient la source de mon problème...
Quelqu'un saurait si je peux avoir des chances de capter un message d'erreur ou autre en lancant mon serveur avec 'gdb' et certaines options ? Ou encore un autre débuggeur ? Ou un fichier de log qui me donnerai la moindre information ?
Harpo
wrote:
Quelqu'un saurait si je peux avoir des chances de capter un message d'erreur ou autre en lancant mon serveur avec 'gdb' et certaines options ? Ou encore un autre débuggeur ?
Essaie strace.
-- http://patrick.davalan.free.fr/
d4r0k1n@hotmail.com wrote:
Quelqu'un saurait si je peux avoir des chances de capter un message
d'erreur ou autre en lancant mon serveur avec 'gdb' et certaines
options ? Ou encore un autre débuggeur ?
Quelqu'un saurait si je peux avoir des chances de capter un message d'erreur ou autre en lancant mon serveur avec 'gdb' et certaines options ? Ou encore un autre débuggeur ?
Essaie strace.
-- http://patrick.davalan.free.fr/
d4r0k1n
Merci pour la commande 'strace', je connaissais pas... Et ca à l'air bien bavard donc j'espère que ca m'avancera...
Merci encore
Merci pour la commande 'strace', je connaissais pas...
Et ca à l'air bien bavard donc j'espère que ca m'avancera...
Merci pour la commande 'strace', je connaissais pas... Et ca à l'air bien bavard donc j'espère que ca m'avancera...
Merci encore
Stan
a écrit dans le message de news:
Bonjour,
Aussi j'aimerais savoir si je pourrais avoir un moyen de connaître plus d'informations sur les raisons de cet arrêt. Si vous connaissez un soft ou quelquechose à essayer pour avancer dans mon problème, merci d'avance.
Est-ce que tout les code erreurs de vos appels systèmes sont bien logué ou tracé ?
Sinon, l'erreur classique des dev multithread, c'est un deadlock qq part.
En plus des log d'erreurs, vous pouvez aussi logguer le passage dans certaine fonctions; on est parfois surpris de ce qui nous parait évident à la lecture du code est en faite une mauvaise interprétation de notre part.
-- -Stan
<d4r0k1n@hotmail.com> a écrit dans le message de news:
1157704060.456676.277950@d34g2000cwd.googlegroups.com...
Bonjour,
Aussi j'aimerais savoir si je pourrais avoir un moyen de connaître
plus d'informations sur les raisons de cet arrêt.
Si vous connaissez un soft ou quelquechose à essayer pour avancer dans
mon problème, merci d'avance.
Est-ce que tout les code erreurs de vos appels systèmes sont bien
logué ou tracé ?
Sinon, l'erreur classique des dev multithread, c'est un deadlock qq part.
En plus des log d'erreurs, vous pouvez aussi logguer le passage dans
certaine fonctions; on est parfois surpris de ce qui nous parait évident à
la lecture
du code est en faite une mauvaise interprétation de notre part.
Aussi j'aimerais savoir si je pourrais avoir un moyen de connaître plus d'informations sur les raisons de cet arrêt. Si vous connaissez un soft ou quelquechose à essayer pour avancer dans mon problème, merci d'avance.
Est-ce que tout les code erreurs de vos appels systèmes sont bien logué ou tracé ?
Sinon, l'erreur classique des dev multithread, c'est un deadlock qq part.
En plus des log d'erreurs, vous pouvez aussi logguer le passage dans certaine fonctions; on est parfois surpris de ce qui nous parait évident à la lecture du code est en faite une mauvaise interprétation de notre part.
-- -Stan
d4r0k1n
Est-ce que tout les code erreurs de vos appels systèmes sont bien logué ou tracé ?
Oui, toutes les erreurs des syscalls sont tracées mais justement rien ne semble anormal dans le fonctionnement du serveur...
Dans le man d'accept, il est dit que l'erreur ERESTARTSYS "peut être rencontrée durant le suivi par un débuggeur" donc je ne suis même pas sûr que cela avance mon problème... En tout cas ce message n'est visible qu'à la fin des fichiers de log de strace. J'ai regardé sur le net mais je n'ai pas vraiment eu plus d'informations sur ce type d'erreur.
Suggestions et idées bienvenues...
Est-ce que tout les code erreurs de vos appels systèmes sont bien
logué ou tracé ?
Oui, toutes les erreurs des syscalls sont tracées mais justement rien
ne semble anormal dans le fonctionnement du serveur...
Dans le man d'accept, il est dit que l'erreur ERESTARTSYS "peut être
rencontrée durant le suivi par un débuggeur" donc je ne suis même
pas sûr que cela avance mon problème...
En tout cas ce message n'est visible qu'à la fin des fichiers de log
de strace.
J'ai regardé sur le net mais je n'ai pas vraiment eu plus
d'informations sur ce type d'erreur.
Dans le man d'accept, il est dit que l'erreur ERESTARTSYS "peut être rencontrée durant le suivi par un débuggeur" donc je ne suis même pas sûr que cela avance mon problème... En tout cas ce message n'est visible qu'à la fin des fichiers de log de strace. J'ai regardé sur le net mais je n'ai pas vraiment eu plus d'informations sur ce type d'erreur.
Suggestions et idées bienvenues...
d4r0k1n
Encore une petite question :
Si mon appli à un problème de deadlock (si les mutex ne fonctionnent pas parfaitement), je peux avoir des clients (threads) qui sont figées ...ou encore une variable globale (partagées) pas "en phase" et si c'est un pointeur, risquer d'écrire n'importe où ?? Mais dans ce cas j'aurais un segfault ? Je ne vois pas comment un problème dans les mutex pourrait faire quitter mon serveur sans avoir le moindre message d'erreur. (??)
Encore une petite question :
Si mon appli à un problème de deadlock (si les mutex ne fonctionnent
pas parfaitement), je peux avoir des clients (threads) qui sont figées
...ou encore une variable globale (partagées) pas "en phase" et si
c'est un pointeur, risquer d'écrire n'importe où ??
Mais dans ce cas j'aurais un segfault ?
Je ne vois pas comment un problème dans les mutex pourrait faire
quitter mon serveur sans avoir le moindre message d'erreur. (??)
Si mon appli à un problème de deadlock (si les mutex ne fonctionnent pas parfaitement), je peux avoir des clients (threads) qui sont figées ...ou encore une variable globale (partagées) pas "en phase" et si c'est un pointeur, risquer d'écrire n'importe où ?? Mais dans ce cas j'aurais un segfault ? Je ne vois pas comment un problème dans les mutex pourrait faire quitter mon serveur sans avoir le moindre message d'erreur. (??)