Itu belum tentu pertanda buruk, tetapi izinkan saya menjawab pertanyaan terakhir Anda terlebih dahulu:
Apa artinya sebenarnya?
Dalam top
kode sumber (dari http://www.opensource.apple.com/release/mac-os-x-1082/ ) keadaan macet disebut sebagai pengidentifikasi LIBTOP_STATE_STUCK
(dari 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
};
(...)
}
Kemudian dalam file yang sama, LIBTOP_STATE_STUCK
dipetakan ke kondisi 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;
(...)
}
Jadi suatu proses dalam keadaan macet berarti bahwa proses / utas berada dalam keadaan tunggu yang tidak dapat diputus , yang adalah bagaimana TH_STATE_UNINTERRUPTIBLE
didefinisikan dalam kernel struct thread_basic_info
(lihat http://web.mit.edu/darwin/src/modules/xnu/osfmk/ man / thread_basic_info.html ):
struct thread_basic_info
{
(...)
integer_t run_state;
(...)
};
dimana run_state
adalah:
run_state: Status menjalankan utas. Nilai yang mungkin adalah:
(...)
- TH_STATE_UNINTERRUPTIBLE: Utas ini dalam kondisi tunggu yang tidak terputus.
(...)
Ini biasanya disebabkan oleh proses menunggu di I / O, yaitu, proses telah meminta untuk membaca atau menulis ke / dari disk atau jaringan dan menunggu panggilan sistem untuk kembali (lihat http://en.wikipedia.org / wiki / Sleep_% 28operating_system% 29 # Tidak terputus atau http://www.novell.com/support/kb/doc.php?id=7002725 untuk informasi lebih lanjut).
(Ketika tidak menggunakan opsi BSD, seperti yang biasanya terjadi di Linux, ps
menunjukkan sleep yang tidak pernah terputus sebagai status D. )
Apakah ini bagian dari siklus hidup normal?
Ya itu. Apa yang tidak normal adalah bahwa suatu proses tetap dalam keadaan ini untuk waktu yang lama. Itu pertanda buruk.
Mengapa proses ini khususnya?
Sulit dikatakan. Ini biasanya disebabkan oleh kemacetan I / O dengan aktivitas disk yang berat atau konektivitas yang menurun ketika menggunakan sistem file jaringan (skenario yang paling umum, menurut pengalaman saya).
(Ini adalah pertanyaan terkait di Ask Different: /apple/58697/how-does-stuck-in-result-of-top-relate-to-not-ponding-in-activity- m .)
ps axug
ataups -eo user,pid,stat,args
. Di Linux, yang dengan kode negara 'D' denganps
perintah yang sama . Lihat penjelasan kata kunci negara (OS X) atau bagian KODE NEGARA PROSES (Linux) diman ps
untuk informasi lebih lanjut. Atau, di OS X, Anda bisa menjalankantop
dan mencari proses yang ditandaistuck
di kolom STATE.