Suivi des appels système
Lorsque vous souhaitez savoir ce qu'un processus est en train de faire, vous pouvez suivre tous les appels système d'un processus en utilisant la commande strace.
1、Exécutez php start.php status pour voir les informations sur les processus liés à Workerman comme suit :
Hello admin
---------------------------------------STATUT GLOBAL--------------------------------------------
Version de Workerman : 3.0.1
Temps de démarrage : 2014-08-12 17:42:04 en cours depuis 0 jours 1 heure
Charge moyenne : 3.34, 3.59, 3.67
1 utilisateurs 8 travailleurs 14 processus
nom_du_travailleur statut_sortie nombre_sortie
BusinessWorker 0 0
ChatWeb 0 0
FileMonitor 0 0
Gateway 0 0
Monitor 0 0
StatisticProvider 0 0
StatisticWeb 0 0
StatisticWorker 0 0
---------------------------------------STATUT DU PROCESSUS-------------------------------------------
pid mémoire à l'écoute timestamp nom_du_travailleur total_demande paquet_err thunder_herd client_close send_fail throw_exception suc/total
10352 1.5M tcp://0.0.0.0:55151 1407836524 ChatWeb 12 0 0 2 0 0 100%
10354 1.25M tcp://0.0.0.0:7272 1407836524 Gateway 3 0 0 0 0 0 100%
10355 1.25M tcp://0.0.0.0:7272 1407836524 Gateway 0 0 1 0 0 0 100%
10365 1.25M tcp://0.0.0.0:55757 1407836524 StatisticWeb 0 0 0 0 0 0 100%
10358 1.25M tcp://0.0.0.0:7272 1407836524 Gateway 3 0 2 0 0 0 100%
10364 1.25M tcp://0.0.0.0:55858 1407836524 StatisticProvider 0 0 0 0 0 0 100%
10356 1.25M tcp://0.0.0.0:7272 1407836524 Gateway 3 0 2 0 0 0 100%
10366 1.25M udp://0.0.0.0:55656 1407836524 StatisticWorker 55 0 0 0 0 0 100%
10349 1.25M tcp://127.0.0.1:7373 1407836524 BusinessWorker 5 0 0 0 0 0 100%
10350 1.25M tcp://127.0.0.1:7373 1407836524 BusinessWorker 0 0 0 0 0 0 100%
10351 1.5M tcp://127.0.0.1:7373 1407836524 BusinessWorker 5 0 0 0 0 0 100%
10348 1.25M tcp://127.0.0.1:7373 1407836524 BusinessWorker 2 0 0 0 0 0 100%
2、Par exemple, si nous voulons savoir ce que fait le processus gateway avec le pid 10354, nous pouvons exécuter la commande strace -p 10354 (il se peut que des droits root soient nécessaires), similaire à ce qui suit :
sudo strace -p 10354
Processus 10354 attaché - interrupteur pour quitter
clock_gettime(CLOCK_MONOTONIC, {118627, 242986712}) = 0
gettimeofday({1407840609, 102439}, NULL) = 0
epoll_wait(3, 985f4f0, 32, -1) = -1 EINTR (Appel système interrompu)
--- SIGUSR2 (Signal défini par l'utilisateur 2) @ 0 (0) ---
send(7, "\f", 1, 0) = 1
sigreturn() = ? (masque maintenant [])
clock_gettime(CLOCK_MONOTONIC, {118627, 699623319}) = 0
gettimeofday({1407840609, 559092}, NULL) = 0
epoll_wait(3, {{EPOLLIN, {u32=9, u64=9}}}, 32, -1) = 1
clock_gettime(CLOCK_MONOTONIC, {118627, 699810499}) = 0
gettimeofday({1407840609, 559277}, NULL) = 0
recv(9, "\f", 1024, 0) = 1
recv(9, 0xb60b4880, 1024, 0) = -1 EAGAIN (Ressource temporairement indisponible)
epoll_wait(3, 985f4f0, 32, -1) = -1 EINTR (Appel système interrompu)
--- SIGUSR2 (Signal défini par l'utilisateur 2) @ 0 (0) ---
send(7, "\f", 1, 0) = 1
sigreturn() = ? (masque maintenant [])
clock_gettime(CLOCK_MONOTONIC, {118628, 699497204}) = 0
gettimeofday({1407840610, 558937}, NULL) = 0
epoll_wait(3, {{EPOLLIN, {u32=9, u64=9}}}, 32, -1) = 1
clock_gettime(CLOCK_MONOTONIC, {118628, 699588603}) = 0
gettimeofday({1407840610, 559023}, NULL) = 0
recv(9, "\f", 1024, 0) = 1
recv(9, 0xb60b4880, 1024, 0) = -1 EAGAIN (Ressource temporairement indisponible)
epoll_wait(3, 985f4f0, 32, -1) = -1 EINTR (Appel système interrompu)
--- SIGUSR2 (Signal défini par l'utilisateur 2) @ 0 (0) ---
send(7, "\f", 1, 0) = 1
sigreturn() = ? (masque maintenant [])
3、Chaque ligne représente un appel système, à partir de ces informations, nous pouvons facilement voir ce que fait le processus et localiser l'emplacement où le processus est bloqué, que ce soit lors de la connexion ou de la lecture de données réseau.