资深软件工程师定期分享嵌入式与协议实战经验,请点击关注。
每个Linux程序员都应该要学会做linux应用性能。linux性能分析有幅图必须看看,这就是高级性能架构师Brendan Gregg所绘制的性能观测图。
性能观测图
从图中可以看出Linux在性能可测试性方面做得非常全面。从底层IO,文件系统,收发包再到上层系统调用再到应用程序各个层面都观测工具。本文先介绍3个常用的工具。
top
这个命令是程序员都熟悉的陌生命令了,常用,但并不一定就会用。
top命令的汇总区域显示了五个方面的系统性能信息:负载 进程 cpu 内存 交换分区
任务区域默认显示:进程ID,有效用户,进程优先级,NICE值,进程使用的虚拟内存,物理内存和共享内存,进程状态,CPU占用率,内存占用率,累计CPU时间,进程命令行信息。
几个你必须明白的字段
VIRT:virtual memory usage 虚拟内存
1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等
2、假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量
RES:resident memory usage 常驻内存
1、进程当前使用的内存大小,但不包括swap out
2、包含其他进程的共享
3、如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反
4、关于库占用内存的情况,它只统计加载的库文件所占内存大小
SHR:shared memory 共享内存
1、除了自身进程的共享内存,也包括其他进程的共享内存
2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小
3、计算某个进程所占的物理内存大小公式:RES – SHR
4、swap out后,它将会降下来
perf
perf是Linux kernel自带的系统性能优化工具。优势在于与Linux Kernel的紧密结合,它可以最先应用到加入Kernel的new feature,用于查看热点函数,查看cashe miss的比率,从而帮助开发者来优化程序性能。它基于事件采样原理,以性能事件为基础,支持针对处理器相关性能指标与操作系统相关性能指标的性能剖析。
常用于性能瓶颈的查找与热点代码的定位。
Perf是一个包含22种子工具的工具集,以下是最常用的5种:
perf-list
perf-stat
perf-top
perf-record
perf-report
如果要你学5个也觉得多,那你至少应该会一个,这个就是pert-top。
lsof
lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。
查看文件系统阻塞 lsof /boot
查看端口号被哪个进程占用 lsof -i : 23
查看用户打开哪些文件 lsof –u username
查看进程打开哪些文件 lsof –p 4568
查看远程已打开的网络连接 lsof –i @192.168.1.2
欢迎留言评论,有问必答。
举报/反馈