Çalışma Durumunu Görüntüle

php start.php status
komutunu çalıştırarak Workerman'ın çalışma durumu görüntülenebilir, benzer şekilde:

----------------------------------------------GLOBAL STATUS----------------------------------------------------
Workerman version:3.5.13          PHP version:5.5.9-1ubuntu4.24
start time:2018-02-03 11:48:20   run 112 days 2 hours   
load average: 0, 0, 0            event-loop:\Workerman\Events\Event
4 workers       11 processes
worker_name        exit_status      exit_count
ChatBusinessWorker 0                0
ChatGateway        0                0
Register           0                0
WebServer          0                0
----------------------------------------------PROCESS STATUS---------------------------------------------------
pid memory  listening                worker_name        connections send_fail timers  total_request qps    status
18306   2.25M   none                     ChatBusinessWorker 5           0         0       11            0      [idle]
18307   2.25M   none                     ChatBusinessWorker 5           0         0       8             0      [idle]
18308   2.25M   none                     ChatBusinessWorker 5           0         0       3             0      [idle]
18309   2.25M   none                     ChatBusinessWorker 5           0         0       14            0      [idle]
18310   2M      websocket://0.0.0.0:7272 ChatGateway        8           0         1       31            0      [idle]
18311   2M      websocket://0.0.0.0:7272 ChatGateway        7           0         1       26            0      [idle]
18312   2M      websocket://0.0.0.0:7272 ChatGateway        6           0         1       21            0      [idle]
18313   1.75M   websocket://0.0.0.0:7272 ChatGateway        5           0         1       16            0      [idle]
18314   1.75M   text://0.0.0.0:1236      Register           8           0         0       8             0      [idle]
18315   1.5M    http://0.0.0.0:55151     WebServer          0           0         0       0             0      [idle]
18316   1.5M    http://0.0.0.0:55151     WebServer          0           0         0       0             0      [idle]
----------------------------------------------PROCESS STATUS---------------------------------------------------
Summary 18M     -                        -                  54          0         4       138           0      [Summary]

Açıklama

GLOBAL STATUS

Bu bölümden görebiliriz

Workerman versiyonu version:3.5.13

Başlatma zamanı 2018-02-03 11:48:20 ve çalıştığı süre run 112 days 2 hours

Sunucu yükü load average: 0, 0, 0; bu değerler sırasıyla son 1 dakika, 5 dakika ve 15 dakika içindeki sistemin ortalama yükünü ifade eder.

Kullanılan IO olay kütüphanesi, event-loop:\Workerman\Events\Event

4 workers (3 tür süreç, ChatGateway, ChatBusinessWorker, Register süreçleri ve WebServer süreci)

11 processes (toplam 11 süreç)

worker_name (işçi süreci adı)

exit_status (işçi sürecinin çıkış durumu kodu)

exit_count (bu durum kodunun çıkış sayısı)

Genel olarak, exit_status 0 ise normal bir çıkışı belirtir. Eğer başka bir değer ise, süreç anormal bir şekilde çıkmıştır ve WORKER EXIT UNEXPECTED gibi bir hata mesajı üretilmiştir, hata mesajı Worker::logFile dosyasına kaydedilecektir.

Yaygın exit_status ve anlamları şu şekildedir:

  • 0: Normal çıkışı temsil eder, reload ile yapılan düzgün yeniden başlatma sonrası 0 değerinde çıkış kodu görülebilir, bu normal bir durumdur. Programda exit veya die çağrılması da çıkış kodunun 0 olmasına neden olur ve WORKER EXIT UNEXPECTED hatası üretilir; workerman içinde iş kodunun exit veya die komutlarını çağırmasına izin verilmez.
  • 9: Sürecin SIGKILL sinyali ile öldürüldüğünü belirtir. Bu çıkış kodu genellikle stop ve reload düzgün yeniden başlatma sırasında meydana gelir; bu çıkış kodunun nedeni çocuk süreç ana sürecin reload sinyaline tanımlı süre içinde yanıt verememesi (örneğin, mysql, curl gibi uzun süreli engellemeler ya da iş kodunun sonsuz döngüde kalması) olup, ana süreç tarafından zorla SIGKILL sinyali ile öldürülmesidir. Ayrıca, Linux komut satırında kill komutu ile çocuk sürece SIGKILL sinyali gönderildiğinde de bu çıkış kodu oluşur.
  • 11: PHP'nin coredump oluşturduğunu belirtir, genellikle kararsız uzantıların kullanılması nedeniyle olur; lütfen php.ini dosyasında ilgili uzantıyı yorum satırına alınız; ayrıca bazı durumlarda PHP'nin hatası bu durumdur ve PHP'nin güncellenmesi gerekir.
  • 65280: Bu çıkış kodunun nedeni iş kodunda kritik bir hatanın olmasıdır; örneğin, var olmayan bir fonksiyonun çağrılması, sözdizimi hatası gibi. Detaylı hata mesajları Worker::logFile ile belirtilen dosyaya kaydedilecektir; ayrıca php.ini içindeki error_log tanımlı dosya içinde (eğer tanımlanmışsa) bulunabilir.
  • 64000: Bu çıkış kodunun nedeni iş kodunun bir istisna fırlatmasıdır ama iş bu istisnayı yakalayamamıştır, bu da sürecin çıkmasına neden olmuştur. Eğer workerman debug modunda çalışıyorsa, hata çağrı yığını terminale yazdırılır, daemon modunda çalışıyorsa hata çağrı yığını Worker::stdoutFile dosyasına kaydedilecektir.

PROCESS STATUS

pid: Sürecin pid'si

memory: Bu sürecin PHP tarafından talep edilen bellek. Bu değer, PHP yürütme dosyasının kapladığı bellek gibi değerler içermez, bu nedenle gösterilen değer, gerçek süreç tarafından kullanılan bellekten daha küçüktür; daha fazla bilgi için memory_get_usage referans alınmalıdır.

listening: Taşıma katmanı protokolü ve dinleme ip portu. Eğer herhangi bir port dinlenmiyorsa, none olarak gösterilir. Worker sınıfı kurucusu için bakınız.

worker_name: Bu sürecin çalıştığı hizmet adı, Worker sınıfı name özelliği için bakınız.

connections: Bu sürecin şu anki açık olan TCP bağlantı örneklerinin sayısı; bağlantı örnekleri TcpConnection ve AsyncTcpConnection örneklerini içerir. Bu değer gerçek zamanlı bir değerdir, toplam bir değer değildir. Not: Bağlantı örnekleri close çağrıldığında, ilgili sayımın bu durumda azalmaması, iş kodunun $connection nesnesini saklamasından kaynaklanabilir ve bu bağlantı örneği yok edilemez.

total_request: Bu sürecin başlama zamanından itibaren aldığı toplam istek sayısını belirtir. Buradaki istek sayısı, yalnızca istemciden gelen istekleri değil, aynı zamanda Workerman iç iletişim isteklerini de kaçırmaz; örneğin, GatewayWorker mimarisinde Gateway ile BusinessWorker arasındaki iletişim istekleri. Bu değer toplam bir değerdir.

send_fail: Bu sürecin istemciye veri gönderirken hata sayısı; hata nedeni genellikle istemci bağlantısının kesilmesidir, bu değerin 0 olmaması genellikle normal bir durumu ifade eder; bu konu hakkında daha fazla bilgi için send_fail nedenleri için bakınız. Bu değer toplam bir değerdir.

timers: Bu sürecin aktif olan zamanlayıcı sayısı (silinmiş zamanlayıcılar ve bir kez çalışmış zamanlayıcılar hariç). Not: Bu özellik için workerman sürümü >=3.4.7 gereklidir. Bu değer gerçek zamanlı bir değerdir, toplam bir değer değildir.

qps: Şu anda süreç tarafından saniyede alınan ağ isteği sayısıdır; not: yalnızca status sırasında -d eklendiğinde bu seçenek sayılacaktır, aksi takdirde 0 olarak gösterilir. Bu özellik için workerman sürümü >=3.5.2 gereklidir. Bu değer gerçek zamanlı bir değerdir, toplam bir değer değildir.

status: Süreç durumu; idle ise boş, busy ise meşguldür. Not: Sürecin geçici olarak meşgul olması normaldir fakat sürecin sürekli meşgul durumu, iş engeli veya işin sonsuz döngüye girmesi olasılığı vardır; bu nedenle meşgul süreçleri hata ayıklama bölümüne göre kontrol edilmelidir. Not: Bu özellik için workerman sürümü >=3.5.0 gereklidir.

Prensip

status komutu çalıştıktan sonra, ana süreç tüm işçi süreçlerine bir SIGUSR2 sinyali gönderir, ardından status komutu kısa bir uyku aşamasına geçer; bu sırada her bir işçi sürecinin durum istatistikleri beklenmektedir. Bu esnada, boşta olan işçi süreçleri SIGUSR2 sinyali aldığında kendi çalışma durumlarını (bağlantı sayısı, istek sayısı vb.) belirli bir disk dosyasına hemen yazarlar, iş mantığını işleyen işçi süreçleri ise kendi durum bilgilerini yazmadan önce iş mantığını tamamlamayı beklerler. Kısa bir uykudan sonra, status komutu disk üzerindeki durum dosyasını okumaya başlar ve sonuçları ekrana getirir.

Dikkat

status sırasında bazı süreçlerin busy durumunda olduğunu görebilirsiniz; bunun nedeni süreçlerin iş işlemleriyle meşgul olmasıdır (örneğin, iş mantığı curl veya veritabanı isteklerinde uzun süre bekliyorsa veya büyük bir döngü sürüyorsa), durum bildirimini gerçekleştiremezler ve bu nedenle busy olarak görünürler.

Bu tür bir sorun ortaya çıktığında, iş kodunu kontrol etmeli ve işin neden uzun süre engellediğine bakmalısınız ve engel süresinin beklentilere uygun olup olmadığını değerlendirmelisiniz; eğer uygun değilse, meşgul süreçleri hata ayıklama bölümüne göre iş kodunu incelemelisiniz.