笔记:常用命令,调试,网络监测,端口监测

2023-03-10 13:26:49 浏览数 (1)

前言

前几个月换了一个新工作,Windows端完全转入了Linux服务器端,语言也彻底变成了C,偶尔夹杂着C 。对于我来说,之前的Vxworks,Qt,VS之类的IDE之下的调试定位也完全都没用了,最近一直在做提测项目,对问题定位,查找问题也有了一定的了解。 在这简单说一下,最近的定位调试命令。

端口分析命令

代码语言:javascript复制
lsof -i:PortID //查看端口使用情况,被那个进程占用,占用协议,是否有等待,来判断端口是否阻塞,等等
代码语言:javascript复制
lsof -p PID //查看PID进程进行的一些操作,查看是否有违规的,死锁,等等其他违法操作。也可以用来查看是否有句柄泄露等问题,看句柄数量即可。

CPU占用率过高,进程死循环或者死锁问题

代码语言:javascript复制
top //不复述了,可以查看虚拟内存,实际使用内存,CPU占用率,内存占用率等,如果看到CPU单核占用率接近100%,也可以很明确断定是程序异常死循环问题导致。
代码语言:javascript复制
top -H -p PID //查看某一个进程下的所有子线程,查看每个子线程的这个属性,如果有某一个或者多个子线程CPU占用率过高,着重分析
代码语言:javascript复制
pstack pid >> pid.txt //将pid栈重定向到pid.txt,拿到txt后分析,死锁原因

如果进程过多,可以考虑写一个简单脚本来操作。

代码语言:javascript复制
pmap -p <pid> //查看运行中动态链接库

死锁问题定位

在运行进程为多线程情况下,定位死锁问题。

代码语言:javascript复制
gdb -p pid //挂载Gdb调试
attach -p //依附于某一个进程
thread apply all bt //查看所有线程栈信息
thread id //转到某一个线程
f id //查看线程某一步骤的详细信息
p lock //打印锁信息 owner 即可看到锁被哪一个进程占用,定位死锁信息

网络问题查看

代码语言:javascript复制
iftop -p  //查看当前服务器下所有网络端口流量情况
iftop -p eht_name //查看指定网口网络流量情况
iperf3 -s -i 1 -d //客户端
iperf3 -c service.ip -i -1 -t 20 -d //服务端 网络流量交互情况,延时1S,20个包

其他命令

代码语言:javascript复制
ps -ef 
ps -T -p pid
ps -ef |grep 
tail -f "file_name" |grep 
df -h
df -H
ll --full-time //显示全部时间
grep -r "str" find-path //查询文件内容分

0 人点赞