Processo bloccato: è un brutto segno?


23

A volte alcuni processi sono bloccati. Per esempio:

PID    COMMAND          %CPU TIME     #TH  #WQ  #POR #MREGS RPRVT  RSHRD  RSIZE  VPRVT  VSIZE  PGRP  PPID  STATE
99357  plugin-container 0.1  12:07.07 10   1    224  2097   40M    84M    66M    82M    2757M  91688 99346 sleeping
99346  firefox          0.4  48:54.20 29   1    265  16250  467M   172M   799M   538M   4210M  91688 1     sleeping 
88029- Aquamacs       1.2  31:24.12 4    3    126  268    19M    49M    32M    36M    777M   88029 152   stuck

Fa parte del normale ciclo di vita del processo? Perché questo processo in particolare?

Cosa significa esattamente?

Risposte:


38

Non è necessariamente un brutto segno, ma lasciami prima rispondere alla tua ultima domanda:

Cosa significa esattamente?

Nel topcodice sorgente (da http://www.opensource.apple.com/release/mac-os-x-1082/ ) lo stato bloccato viene indicato come identificatore LIBTOP_STATE_STUCK(da libtop.c):

libtop_state_str(uint32_t state)
{
        const char *strings[] = {
                "zombie",
#define LIBTOP_STATE_ZOMBIE     0
                "running",
#define LIBTOP_STATE_RUN        1
                "stuck",
#define LIBTOP_STATE_STUCK      2
                "sleeping",
#define LIBTOP_STATE_SLEEP      3
                "idle",
#define LIBTOP_STATE_IDLE       4
                "stopped",
#define LIBTOP_STATE_STOP       5
                "halted",
#define LIBTOP_STATE_HALT       6
                "unknown"
#define LIBTOP_STATE_UNKNOWN    7
        };
(...)
}

Più tardi nello stesso file, LIBTOP_STATE_STUCKviene mappato allo stato del kernel TH_STATE_UNINTERRUPTIBLE:

/* Translate a mach state to a state in the state breakdown array. */
static int
libtop_p_mach_state_order(int state, long sleeptime)
{
        switch (state) {
                case TH_STATE_RUNNING:
                        return LIBTOP_STATE_RUN;
                case TH_STATE_UNINTERRUPTIBLE:
                        return LIBTOP_STATE_STUCK;
(...)
}

Quindi un processo in stato bloccato significa che il processo / thread è in uno stato di attesa ininterrotto , che è come TH_STATE_UNINTERRUPTIBLEè definito nella struttura del kernel thread_basic_info(vedi http://web.mit.edu/darwin/src/modules/xnu/osfmk/ man / thread_basic_info.html ):

struct thread_basic_info
{
(...)
       integer_t        run_state;
(...)
};

dove si run_statetrova:

run_state: lo stato di esecuzione del thread. I valori possibili sono:

(...)

  • TH_STATE_UNINTERRUPTIBLE: il thread è in uno stato di attesa non interrompibile.

(...)

Questo di solito è causato da un processo in attesa su I / O, ovvero il processo ha richiesto di leggere o scrivere sul / dal disco o dalla rete e attende che la chiamata di sistema ritorni (vedi http://en.wikipedia.org / wiki / Sleep_% 28operating_system% 29 # Uninterruptible_sleep o http://www.novell.com/support/kb/doc.php?id=7002725 per ulteriori informazioni).

(Quando non si utilizzano le opzioni BSD, come di solito accade in Linux, viene psvisualizzato il sonno ininterrotto come stato D. )

Fa parte del normale ciclo di vita del processo?

Sì. Ciò che non è normale è che un processo rimane in questo stato per lungo tempo. È un brutto segno.

Perché questo processo in particolare?

Difficile da dire Di solito è causato da colli di bottiglia di I / O con attività del disco pesante o connettività degradata quando si utilizzano i filesystem di rete (lo scenario più comune, nella mia esperienza).

(Questa è una domanda correlata in Chiedi diverso: /apple/58697/how-does-stuck-in-results-of-top-relate-to-not-responding-in-activity- m .)


1
Come posso scoprire quali processi sono esattamente bloccati?
mareoraft,

3
@mareoraft In OS X, quelli con un codice di stato 'U' nell'output di ps axugo ps -eo user,pid,stat,args. In Linux, quelli con un codice di stato 'D' con gli stessi pscomandi. Per ulteriori informazioni, consultare la spiegazione della parola chiave di stato (OS X) o la sezione CODICI DI STATO DI PROCESSO (Linux) man ps. Oppure, in OS X, è possibile eseguire tope cercare i processi contrassegnati come stucknella colonna STATE.
Jaume
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.