Linux下进程状态详解
- top 、uptime 等命令展现出的 load average,并非 CPU load average,而是系统整体负载,包括了对磁盘资源的请求
但是通常情况下,load average / CPU core number > 1 暗示系统可能是CPU BOUND
计算公式: load average = TASK_RUNNING + TASK_UNINTERRUPTABLE
Linux下进程状态的划分:
- R:TASK_RUNNING
- S:TASK_INTERRUPTABLE
- D:TASK_UNINTERRUPTABLE:这个状态一般出现在进程与外部设备交换,内核的一些处理流程是无法被中断的,如果此时允许中断,原有流程被插入一段处理异步信号的流程,进程与外部设备交互过程被中断,那么外部设备可能陷入不可控的状态,因此,此时不响应异步信号(kill -9 无法杀死)
- Z:TASK_ZOMBIE
- 常见目录项
- cmdline:命令行参数
- cwd
- exe
- fd
- maps
- cgroup
- top命令常见参数
- -c :输出完整命令行
- -H:显示每个线程而非进程的汇总 (通过pthread_setname_np)更友好
- -p pid:显示特定进程的信息
- 交互命令:
- m:切换显示内存的方式
- t:切换显示CPU负载的方式
- c:切换显示完整命令行与否
- M:按内存排序
- P:按CPU排序
- T:按运行时间排序
- perf perf record 通过挂载到某个进程上生成 perf.data,perf report 读取perf.data 获得信息
- address-sanitizer:原理是 shadow poison,能够探测dangling pointer、buffer overflow、memory leak
- [Use after free] (dangling pointer dereference)
- [Heap buffer overflow]
- [Stack buffer overflow]
- [Global buffer overflow]
- [Use after return]
- [Use after scope]
- [Initialization order bugs]
- [Memory leaks]
- iostat 各列说明:一般开启 -x 参数获得详细数据
- rrqm/wrqm:向该设备请求次数
- r/w:每秒读写次数
- rkB/wkB:每秒读写数据量
- avgrq_sz:每次IO操作的平均扇区数
- avgqu_sz:每次IO操作的等待队列长度
- await:IO等待时间(ms)
- svctm:IO处理时间(ms)
- util:IO队列非空的时间比例
- netstat参数
- -a:列出所有(不含listen)
- -t/u : tcp/ udp
- -n :优先数字
- -l: 列出处于监听状态
- -p:列出程序名
- -s:按照协议划分
- 丢包场景划分
- 缓冲区满:netstat RecvQ很大
- 半连接满:syn并发数量大,syn flooding。 调节net.ipv4.tcp_max_syn_backlog
- 链路丢包、网卡丢包
推荐阅读
- 蓝桥杯|蓝桥杯31天冲刺打卡(Day9)
- 蓝桥杯准备每日练习|【蓝桥杯技巧篇】next_permutation全排列详解
- 激光条纹中心提取|激光条纹中心提取——灰度重心法
- QT|QT中自定义注释模板整理
- 记录|Qt自定义控件-----仿B站标签创建框
- qt|C++图形用户界面开发框架Qt 6.x入门级教程 - 开发工具简介
- Qt基础|c++ qt自定义搜索编辑框
- c++|2011-2012工作总结
- c++|PTA堆栈—有效括号判断