ติดตามการเรียกใช้ระบบ

เมื่อต้องการทราบว่ากระบวนการกำลังทำอะไรอยู่ เราสามารถใช้คำสั่ง strace เพื่อติดตามการเรียกใช้ระบบของกระบวนการทั้งหมด

  1. การรัน php start.php status สามารถเห็นข้อมูลของกระบวนการที่เกี่ยวข้องกับ workerman ดังนี้:
สวัสดี admin
---------------------------------------สถานะทั่วไป--------------------------------------------
เวอร์ชั่นของ Workerman: 3.0.1
เวลาเริ่มต้น: 2014-08-12 17:42:04 เริ่ม 0 วัน 1 ชั่วโมง
อัตราการโหลด: 3.34, 3.59, 3.67
1 ผู้ใช้           8 ผู้ทำงาน           14 กระบวนการ
ชื่อของผู้ทำงาน      สถานะการออก        จำนวนการออกไป
BusinessWorker       0                0
ChatWeb              0                0
FileMonitor          0                0
Gateway              0                0
Monitor              0                0
StatisticProvider    0                0
StatisticWeb         0                0
StatisticWorker      0                0
---------------------------------------สถานะของกระบวนการ-------------------------------------------
pid   หน่วยความจำ      การฟัง      ประทับเวลา    ชื่อของผู้ทำงาน      คำขอทั้งหมด  ข้อผิดพลาดในส่ง  thunder_herd  การปิด client   การส่งล้มเหลว  ส่งข้อผิดพลาด  โยนประการพิเศษ  สำเร็จ/ทั้งหมด
10352  1.5M    tcp://0.0.0.0:55151  1407836524 ChatWeb           12             0          0            2            0         0               100%
10354  1.25M   tcp://0.0.0.0:7272   1407836524 Gateway           3              0          0            0            0         0               100%
10355  1.25M   tcp://0.0.0.0:7272   1407836524 Gateway           0              0          1            0            0         0               100%
10365  1.25M   tcp://0.0.0.0:55757  1407836524 StatisticWeb      0              0          0            0            0         0               100%
10358  1.25M   tcp://0.0.0.0:7272   1407836524 Gateway           3              0          2            0            0         0               100%
10364  1.25M   tcp://0.0.0.0:55858  1407836524 StatisticProvider 0              0          0            0            0         0               100%
10356  1.25M   tcp://0.0.0.0:7272   1407836524 Gateway           3              0          2            0            0         0               100%
10366  1.25M   udp://0.0.0.0:55656  1407836524 StatisticWorker   55             0          0            0            0         0               100%
10349  1.25M   tcp://127.0.0.1:7373 1407836524 BusinessWorker    5              0          0            0            0         0               100%
10350  1.25M   tcp://127.0.0.1:7373 1407836524 BusinessWorker    0              0          0            0            0         0               100%
10351  1.5M    tcp://127.0.0.1:7373 1407836524 BusinessWorker    5              0          0            0            0         0               100%
10348  1.25M   tcp://127.0.0.1:7373 1407836524 BusinessWorker    2              0          0            0            0         0               100%
  1. ตัวอย่างเช่น ถ้าเราต้องการทราบว่ากระบวนการ gateway ที่มี pid เท่ากับ 10354 กำลังทำอะไร เราสามารถรันคำสั่ง strace -p 10354 (อาจจะต้องใช้สิทธิ์ root) ดังนี้:
sudo strace -p 10354
กระบวนการ 10354 เชื่อมโยง - กด Ctrl+C เพื่อหยุด
clock_gettime(CLOCK_MONOTONIC, {118627, 242986712}) = 0
gettimeofday({1407840609, 102439}, NULL) = 0
epoll_wait(3, 985f4f0, 32, -1)          = -1 EINTR (หยุดการเรียกใช้ระบบ)
--- SIGUSR2 (สัญญาณที่กำหนดเอง 2) @ 0 (0) ---
send(7, "\f", 1, 0)                     = 1
sigreturn()                             = ? (กำหนดการโค้งที่นี่ [])
clock_gettime(CLOCK_MONOTONIC, {118627, 699623319}) = 0
gettimeofday({1407840609, 559092}, NULL) = 0
epoll_wait(3, {{EPOLLIN, {u32=9, u64=9}}}, 32, -1) = 1
clock_gettime(CLOCK_MONOTONIC, {118627, 699810499}) = 0
gettimeofday({1407840609, 559277}, NULL) = 0
recv(9, "\f", 1024, 0)                  = 1
recv(9, 0xb60b4880, 1024, 0)            = -1 EAGAIN (ไม่พร้อมใช้งานชั่วคราว)
epoll_wait(3, 985f4f0, 32, -1)          = -1 EINTR (หยุดการเรียกใช้ระบบ)
--- SIGUSR2 (สัญญาณที่กำหนดเอง 2) @ 0 (0) ---
send(7, "\f", 1, 0)                     = 1
sigreturn()                             = ? (กำหนดการโค้งที่นี่ [])
clock_gettime(CLOCK_MONOTONIC, {118628, 699497204}) = 0
gettimeofday({1407840610, 558937}, NULL) = 0
epoll_wait(3, {{EPOLLIN, {u32=9, u64=9}}}, 32, -1) = 1
clock_gettime(CLOCK_MONOTONIC, {118628, 699588603}) = 0
gettimeofday({1407840610, 559023}, NULL) = 0
recv(9, "\f", 1024, 0)                  = 1
recv(9, 0xb60b4880, 1024, 0)            = -1 EAGAIN (ไม่พร้อมใช้งานชั่วคราว)
epoll_wait(3, 985f4f0, 32, -1)          = -1 EINTR (หยุดการเรียกใช้ระบบ)
--- SIGUSR2 (สัญญาณที่กำหนดเอง 2) @ 0 (0) ---
send(7, "\f", 1, 0)                     = 1
sigreturn()                             = ? (กำหนดการโค้งที่นี่ [])
  1. ทุกบรรทัดนั้นคือการเรียกใช้ระบบหนึ่งรายการ จากข้อมูลนี้เราสามารถเห็นแล้วว่ากระบวนการกำลังทำอะไร ทำให้สามารถระบุได้ว่ากระบวนการติดอยู่ที่ไหน ติดอยู่ที่การเชื่อมต่อหรือการอ่านข้อมูลจากเครือข่าย ฯลฯ