いくつかのプロセスがスタックした状態になることがあります。例えば:
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
プロセスの通常のライフサイクルの一部ですか?特にこのプロセスはなぜですか?
正確にはどういう意味ですか?
これは必ずしも悪い兆候ではありませんが、最初の最後の質問に答えさせてください。
正確にはどういう意味ですか?
top
ソースコード( http://www.opensource.Apple.com/release/mac-os-x-1082/ から) stuck状態は識別子LIBTOP_STATE_STUCK
として参照されます(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
};
(...)
}
後で同じファイルで、LIBTOP_STATE_STUCK
はカーネル状態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;
(...)
}
したがって、stuck状態のプロセスは、プロセス/スレッドが割り込み不可能な待機状態であることを意味します。カーネル構造体TH_STATE_UNINTERRUPTIBLE
でのthread_basic_info
の定義方法です( http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/thread_basic_info.htmlを参照 ):
struct thread_basic_info
{
(...)
integer_t run_state;
(...)
};
ここで、run_state
は:
run_state:スレッドの実行状態。可能な値は次のとおりです。
(...)
- TH_STATE_UNINTERRUPTIBLE:スレッドは割り込み不可能な待機状態です。
(...)
これは通常、I/Oで待機しているプロセスによって引き起こされます。つまり、プロセスはディスクまたはネットワークへの読み取りまたはディスクまたはネットワークからの書き込みを要求し、システムコールが戻るのを待機します( http:// enを参照)。 .wikipedia.org/wiki/Sleep_%28operating_system%29#Uninterruptible_sleep または http://www.novell.com/support/kb/doc.php?id=7002725 詳細については) 。
(通常、Linuxの場合のようにBSDオプションを使用しない場合、ps
は無停電スリープを[〜#〜] d [〜#〜]状態として示します。)
それはプロセスの通常のライフサイクルの一部ですか?
はい、そうです。通常ではないことは、プロセスがこの状態で長時間とどまることです。 それは悪い兆候です。
なぜこのプロセスが特に必要なのですか?
言うのは難しい。これは通常、ネットワークファイルシステムを使用しているときに、ディスクアクティビティが重いI/Oボトルネックまたは接続性の低下が原因で発生します(私の経験では、最も一般的なシナリオです)。
(これはAsk Differentの関連質問です: https://Apple.stackexchange.com/questions/58697/how-does-stuck-in-results-of-top-relate-to-not-responding- in-activity-m 。)