Sıkışmış süreç: kötü bir işaret mi?


23

Bazen birkaç işlem sıkışmış durumda. Örneğin:

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

Sürecin normal yaşam döngüsünün bir parçası mı? Neden bu işlem özellikle?

Tam olarak ne anlama geliyor?

Yanıtlar:


38

Bu mutlaka kötü bir işaret değil, ilk önce son sorunuzu cevaplamama izin verin:

Tam olarak ne anlama geliyor?

Olarak top(kaynak kodu http://www.opensource.apple.com/release/mac-os-x-1082/ ) sıkışmış halde tanımlayıcısı olarak ifade edilir LIBTOP_STATE_STUCK(dan 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
        };
(...)
}

Aynı dosyada, LIBTOP_STATE_STUCKdaha sonra çekirdek durumuna eşlenir 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;
(...)
}

Dolayısıyla, sıkışmış durumda olan bir işlem, işlemin / iş parçacığının,TH_STATE_UNINTERRUPTIBLE çekirdek yapısında nasıl tanımlandığı gibi kesintisiz bir bekleme durumunda olduğu anlamına gelirthread_basic_info (bkz. Http://web.mit.edu/darwin/src/modules/xnu/osfmk/ man / thread_basic_info.html ):

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

nerede run_state:

run_state: İş parçacığının çalışma durumu. Olası değerler:

(...)

  • TH_STATE_UNINTERRUPTIBLE: İş parçacığı kesilemez bir bekleme durumunda.

(...)

Bu genellikle G / Ç'de bekleyen bir işlemden kaynaklanır, yani işlem, diskten veya ağdan okumak veya yazmaktan ve sistem çağrısının geri dönmesini bekler (bkz. Http://en.wikipedia.org). / wiki / Sleep_% 28operating_system% 29 # Kesintisiz_sleep veya http://www.novell.com/support/kb/doc.php?id=7002725 daha fazla bilgi için).

(BSD seçeneklerini kullanmadığınızda, genellikle Linux'ta olduğu gibi ps, kesintisiz uyku durumunu D durumu olarak gösterir .)

Sürecin normal yaşam döngüsünün bir parçası mı?

Evet öyle. Normal olmayan, bir sürecin uzun süre bu durumda kalmasıdır . Bu kötü bir işaret.

Neden bu işlem özellikle?

Söylemesi zor. Genellikle ağ dosya sistemlerini (deneyimlerime göre en yaygın senaryo) kullanırken ağır disk etkinliğine veya bozulmuş bağlantıya sahip G / Ç darboğazları nedeniyle oluşur.

(Bu, Farklı Sorma ile ilgili bir soru: /apple/58697/how-does-stuck-in-results-of-top-relate-to-not-responding-in-activity- m .)


1
Tam olarak hangi işlemlerin takıldığını nasıl öğrenebilirim?
59'da mareoraft

3
@mareoraft OS X, çıktısında bir 'U' durum kodu ile olanlar ps axugya da ps -eo user,pid,stat,args. Linux'ta, 'D' kodlu olanlar aynı pskomutlarla kod yazarlar. Daha man psfazla bilgi için state anahtar sözcüğünün (OS X) veya PROCESS STATE CODES bölümünün (Linux) açıklamasına bakın . Veya OS X'te, STATE sütununda topişaretli olan işlemleri çalıştırabilir ve stuckarayabilirsiniz.
jaume
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.