您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
workerman调试-跟踪系统调用
发布时间:2021-12-12 18:30:36编辑:雪饮阅读()
跟踪系统调用
当想知道一个进程在做什么事情的时候,可以通过strace命令跟踪一个进程的所有系统调用。
假如有一个简单的workerman的服务如:
<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('tcp://0.0.0.0:8686');
$worker->protocol = 'Workerman\\Protocols\\Http';
$worker->onMessage = function(TcpConnection $connection)
{
$connection->send("hello");
};
// 运行worker
Worker::runAll();
?>
让该服务跑起来:
[root@localhost workerman]# /usr/local/php734/bin/php -c /usr/local/php734/lib/php/php.ini start.php start
Workerman[start.php] start in DEBUG mode
---------------------------------------- WORKERMAN -----------------------------------------
Workerman version:4.0.22 PHP version:7.3.4
----------------------------------------- WORKERS ------------------------------------------
proto user worker listen processes status
tcp root none tcp://0.0.0.0:8686 1 [OK]
--------------------------------------------------------------------------------------------
Press Ctrl+C to stop. Start success.
然后可以查看该服务的状态信息:
[root@localhost workerman]# /usr/local/php734/bin/php -c /usr/local/php734/lib/php/php.ini start.php status
Workerman[start.php] status
----------------------------------------------GLOBAL STATUS----------------------------------------------------
Workerman version:4.0.22 PHP version:7.3.4
start time:2021-12-12 08:19:55 run 0 days 2 hours
load average: 0, 0.01, 0.05 event-loop:\Workerman\Events\Event
1 workers 1 processes
worker_name exit_status exit_count
none 0 0
----------------------------------------------PROCESS STATUS---------------------------------------------------
pid memory listening worker_name connections send_fail timers total_request qps status
44892 2M tcp://0.0.0.0:8686 none 2 0 0 6 0 [idle]
----------------------------------------------PROCESS STATUS---------------------------------------------------
Summary 2M - - 2 0 0 6 0 [Summary]
这里看到pid为44892的进程。
那么我跟踪44892这个进程如:
[root@localhost workerman]# strace -p 44892
strace: Process 44892 attached
epoll_wait(4, [{EPOLLIN, {u32=7, u64=7}}], 32, -1) = 1
recvfrom(7, "GET / HTTP/1.1\r\nHost: 192.168.43"..., 65535, 0, NULL, NULL) = 601
sendto(7, "HTTP/1.1 200 OK\r\nServer: workerm"..., 125, 0, NULL, 0) = 125
epoll_wait(4, [{EPOLLIN, {u32=7, u64=7}}], 32, -1) = 1
recvfrom(7, "GET /favicon.ico HTTP/1.1\r\nHost:"..., 65535, 0, NULL, NULL) = 523
sendto(7, "HTTP/1.1 200 OK\r\nServer: workerm"..., 125, 0, NULL, 0) = 125
epoll_wait(4, [{EPOLLIN, {u32=8, u64=8}}], 32, -1) = 1
recvfrom(8, "", 65535, 0, NULL, NULL) = 0
epoll_ctl(4, EPOLL_CTL_DEL, 8, 0x7ffc847d0930) = 0
close(8) = 0
epoll_wait(4,
上面这些信息是在我执行了strace -p 44892后然后浏览器访问如http://192.168.43.170:8686/后触发的信息并结合strace -p 44892刚运行时候的输出信息的一个完整信息显示。
这里执行这个命令时候可能会需要root权限,我这里身份本来就是root,所以无感。
其中每一行是一个系统调用,从这个信息中我们很容易看到进程在做一些什么事情,可以定位到进程卡在哪里,卡在连接还是读取网络数据等。
这一特性,也可用于排查一些非安全性的进程,可疑的一些进程。
关键字词:workerman,调试,跟踪,系统,调用
相关文章
- workerman调试-网络抓包
- workerman实现http客户端及chunk服务端
- workerman的http服务-基本调试 - 查看运行状态
- workerman的http服务-基本调试
- workerman的http服务-SSE(推送服务,服务端主推)
- workerman的http服务-session管理-更改存储驱动
- workerman的http服务-session管理-设置session存储位
- workerman的http服务-session管理-更改session存储引
- workerman的http服务-session会话-判断对应session数
- workerman的http服务-session会话-删除所有session数