Festgesetzter Prozess: Ist das ein schlechtes Zeichen?

23

Manchmal stecken einige Prozesse fest. Beispielsweise:

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

Gehört es zum normalen Lebenszyklus eines Prozesses? Warum gerade dieser Prozess?

Was bedeutet es genau ?

Alecail
quelle

Antworten:

38

Es ist nicht unbedingt ein schlechtes Zeichen, aber lassen Sie mich zuerst Ihre letzte Frage beantworten:

Was bedeutet es genau?

Im topQuellcode (von http://www.opensource.apple.com/release/mac-os-x-1082/ ) wird der feststeckende Status als Identifier LIBTOP_STATE_STUCK(von libtop.c) bezeichnet:

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
        };
(...)
}

Wird später in derselben Datei LIBTOP_STATE_STUCKdem Kernelstatus zugeordnet 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;
(...)
}

Ein Prozess im blockierten Zustand bedeutet also, dass sich der Prozess / Thread in einem unterbrechungsfreien Wartezustand befindet, wie TH_STATE_UNINTERRUPTIBLEin der Kernelstruktur definiert thread_basic_info(siehe http://web.mit.edu/darwin/src/modules/xnu/osfmk/). man / thread_basic_info.html ):

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

wo run_stateist

run_state: Der Ausführungsstatus des Threads. Mögliche Werte sind:

(...)

  • TH_STATE_UNINTERRUPTIBLE: Der Thread befindet sich in einem nicht unterbrechbaren Wartezustand.

(...)

Dies wird normalerweise durch einen Prozess verursacht, der auf E / A wartet, dh, der Prozess hat das Lesen oder Schreiben auf / von der Festplatte oder dem Netzwerk angefordert und wartet auf die Rückkehr des Systemaufrufs (siehe http://en.wikipedia.org) / wiki / Sleep_% 28operating_system% 29 # Uninterruptible_sleep oder http://www.novell.com/support/kb/doc.php?id=7002725 ( weitere Informationen).

(Wenn BSD-Optionen nicht verwendet werden, wie dies normalerweise unter Linux der Fall ist, pswird der unterbrechungsfreie Ruhezustand als D- Status angezeigt .)

Gehört es zum normalen Lebenszyklus eines Prozesses?

Ja ist es. Was nicht normal ist, ist, dass ein Prozess für eine lange Zeit in diesem Zustand bleibt . Das ist ein schlechtes Zeichen.

Warum gerade dieser Prozess?

Schwer zu sagen. Dies wird normalerweise durch E / A-Engpässe mit hoher Festplattenaktivität oder eingeschränkter Konnektivität bei der Verwendung von Netzwerkdateisystemen verursacht (das nach meiner Erfahrung üblichste Szenario).

(Dies ist eine verwandte Frage in Ask Different: /apple/58697/how-does-stuck-in-results-of-top-relate-to-not-responding-in-activity- m .)

jaume
quelle
1
Wie kann ich herausfinden, welche Prozesse genau stecken?
Mareoraft
3
@mareoraft In OS X die mit einem 'U'-Statuscode in der Ausgabe von ps axugoder ps -eo user,pid,stat,args. Unter Linux diejenigen mit einem D-Statuscode mit denselben psBefehlen. man psWeitere Informationen finden Sie in der Erläuterung des Schlüsselworts state (OS X) oder im Abschnitt PROCESS STATE CODES (Linux) unter . In OS X können Sie auch topnach Prozessen suchen, die stuckin der Spalte STATE markiert sind .
Jaume