进程相关
定位进程
top //查看进程占用资源 cpu,mem
ps -aux|grep php-fpm //查看php-fpm相关进程
分析进程
[root@izwz97ww79qca7m2kxb6hqz ~]# ll /proc/28770/fd //查看进程28770中所有操作的文件fd total 0 lrwx------ 1 root root 64 Jul 20 16:56 0 -> /dev/null lrwx------ 1 root root 64 Jul 20 16:56 1 -> /dev/null l-wx------ 1 root root 64 Jul 20 16:56 2 -> /usr/local/php/var/log/php-fpm.log l-wx------ 1 root root 64 Jul 20 16:56 3 -> /usr/local/php/var/log/php-fpm.log lrwx------ 1 root root 64 Jul 20 16:56 4 -> socket:[64487945] lrwx------ 1 root root 64 Jul 20 16:56 6 -> socket:[64487946] lrwx------ 1 root root 64 Jul 20 16:56 7 -> socket:[64487487] lrwx------ 1 root root 64 Jul 20 16:56 8 -> anon_inode:[eventpoll]
[root@izwz97ww79qca7m2kxb6hqz ~]# ll /proc/28770/exe //进程2877程序链接 lrwxrwxrwx 1 root root 0 Jul 20 16:55 /proc/28770/exe -> /usr/local/php/sbin/php-fpm
strace的使用
监控用户空间进程和内核的交互,比如系统调用、信号传递、进程状态变更等。 简单来说就是显示进程中所有的系统调用。显示的是系统调用函数,参数,返回结果,所以要熟悉linux的系统调用函数。
linux系统调用
文件和设备访问类 比如open/close/read/write/chmod等 进程管理类 fork/clone/execve/exit/getpid等 信号类 signal/sigaction/kill 等 内存管理 brk/mmap/mlock等 进程间通信IPC shmget/semget * 信号量,共享内存,消息队列等 网络通信 socket/connect/sendto/sendmsg 等 其他
strace command 直接加上命令
strace php index.php //追踪index.php脚本运行
strace -p pid 动态追踪正在运行的进程
strace -p 28770 //每秒钟检测进程的系统调用信息
strace -tt -T -v -f -e trace=file -o /data/log/strace.log -s 1024 -p 23489 -tt 在每行输出的前面,显示毫秒级别的时间 -T 显示每次系统调用所花费的时间 -v 对于某些相关调用,把完整的环境变量,文件stat结构等打出来。 -f 跟踪目标进程,以及目标进程创建的所有子进程 -e 控制要跟踪的事件和跟踪行为,比如指定要跟踪的系统调用名称 -o 把strace的输出单独写到指定的文件 -s 当系统调用的某个参数是字符串时,最多输出指定长度的内容,默认是32个字节 -p 指定要跟踪的进程pid, 要同时跟踪多个pid, 重复多次-p选项即可。 -e trace=file 跟踪和文件访问相关的调用(参数中有文件名) -e trace=process 和进程管理相关的调用,比如fork/exec/exit_group -e trace=network 和网络通信相关的调用,比如socket/sendto/connect -e trace=signal 信号发送和处理相关,比如kill/sigaction -e trace=desc 和文件描述符相关,比如write/read/select/epoll等 -e trace=ipc 进程间通信相关,比如shmget等
可以发现strace显示出来,每一行都是一个系统调用,=左边是传参和系统函数,右边是返回结果。
网络相关
tcpdump工具
https://linux.cn/article-3967-1-qqmail.html
指定端口
扫描二维码关注公众号,回复:
12890763 查看本文章

tcpdump port 80
指定主机
- 抓取所有经过 eth1,目的或源地址是 192.168.1.1 的网络数据 # tcpdump host 192.168.1.1 - 源地址 # tcpdump src host 192.168.1.1 - 目的地址 # tcpdump dst host 192.168.1.1
指定网卡
tcpdump -i eth0
指定协议
tcpdump -i eth0 ip tcpdump -i eth0 tcp tcpdump -i eth0 udp
解读tcpdump返回的信息
[root@izwz97ww79qca7m2kxb6hqz ~]# tcpdump port 80 and host 14.18.155.82 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes 14:37:46.803400 IP 14.18.155.82.50365 > izwz97ww79qca7m2kxb6hqz.http: Flags [S], seq 1624071665, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0 14:37:46.803466 IP izwz97ww79qca7m2kxb6hqz.http > 14.18.155.82.50365: Flags [S.], seq 2906330048, ack 1624071666, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0 14:37:46.803626 IP 14.18.155.82.50364 > izwz97ww79qca7m2kxb6hqz.http: Flags [S], seq 2880783494, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0 14:37:46.803642 IP izwz97ww79qca7m2kxb6hqz.http > 14.18.155.82.50364: Flags [S.], seq 3344087554, ack 2880783495, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0 14:37:46.810872 IP 14.18.155.82.50364 > izwz97ww79qca7m2kxb6hqz.http: Flags [.], ack 1, win 16425, length 0 14:37:46.811612 IP 14.18.155.82.50365 > izwz97ww79qca7m2kxb6hqz.http: Flags [.], ack 1, win 16698, length 0
14:37:46.803400 IP 14.18.155.82.50365 > izwz97ww79qca7m2kxb6hqz.http: Flags [S], seq 1624071665, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
14:37:46.810872 :时间 时分秒毫秒 IP : 是IP包 14.18.155.82.50364 : 表示这个包的源IP为14.18.155.82,源端口为50364 “ > ” : 表示数据包的传输方向 izwz97ww79qca7m2kxb6hqz.http :主机名和端口 Flags: [S]: SYN(开始连接) [.]: 没有 Flag [P]: PSH(推送数据) [F]: FIN (结束连接) [R]: RST(重置连接) win:滑动窗口大小为8192 mss 大小为1460(即可接收的最大包长度,通常为MTU减40字节,IP头和TCP头各20字节)
注意:三次握手中,SYN的参数seq=j, 对应的返回seq=i;ACK=j+1,但是第三次握手中,ACK=1,而不是i+1,主要原因是tcpdump简化了显示。真实的值还是i+1。如果要显示绝对数值,加一个-S即可。
SYN包会有个序列号seq=j,而应答这个SYN包,ack=j+1,对应的序列号加1;FIN包也是一样,也有一个序列号seq.