Linux 性能优化思路

性能优化

性能优化的核心是找出系统的瓶颈点,问题找到了,优化的工作也就完成了大半; 这里介绍的性能优化主要从两个层面来介绍:系统层面和程序层面。

top

进入交互模式后:

  • 输入M,进程列表按内存使用大小降序排序,便于我们观察最大内存使用者使用有问题(检测内存泄漏问题)
  • 输入P,进程列表按CPU使用大小降序排序,便于我们观察最耗CPU资源的使用者是否有问题

top第三行显示当前系统的,其中有两个值很关键:

  • %id:空闲CPU时间百分比,如果这个值过低,表明系统CPU存在瓶颈
  • %wa:等待I/O的CPU时间百分比,如果这个值过高,表明IO存在瓶颈
分析内存瓶颈

查看内存是否存在瓶颈,使用top指令看比较麻烦,而free命令更为直观。

top工具显示了free工具的第一行所有信息,但真实可用的内存,还需要自己计算才知道; 系统实际可用的内存为free工具输出第二行的free+buffer+cached。

如果是因为缺少内存,系统响应变慢很明显,因为这使得系统不停的做换入换出的工作。

分析IO瓶颈

如果IO存在性能瓶颈,top工具中的%wa会偏高。

  • 如果%iowait的值过高,表示硬盘存在I/O瓶颈
  • 如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈
  • 如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间
  • 如果 await 远大于 svctm,说明I/O 队列太长,io响应太慢,则需要进行必要优化
  • 如果avgqu-sz比较大,也表示有大量io在等待
分析进程调用

pstack和pstrace。

pstack用来跟踪进程栈,这个命令在排查进程问题时非常有用,比如我们发现一个服务一直处于work状态(如假死状态,好似死循环),使用这个命令就能轻松定位问题所在;可以在一段时间内,多执行几次pstack,若发现代码栈总是停在同一个位置,那个位置就需要重点关注,很可能就是出问题的地方。

而strace用来跟踪进程中的系统调用;这个工具能够动态的跟踪进程执行时的系统调用和所接收的信号。是一个非常有效的检测、指导和调试工具。系统管理员可以通过该命令容易地解决程序问题。

gprof使用步骤
  • 用gcc、g++、xlC编译程序时,使用-pg参数,如:g++ -pg -o test.exe test.cpp编译器会自动在目标代码中插入用于性能测试的代码片断,这些代码在程序运行时采集并记录函数的调用关系和调用次数,并记录函数自身执行时间和被调用函数的执行时间。
  • 执行编译后的可执行程序,如:./test.exe。该步骤运行程序的时间会稍慢于正常编译的可执行程序的运行时间。程序运行结束后,会在程序所在路径下生成一个缺省文件名为gmon.out的文件,这个文件就是记录程序运行的性能、调用关系、调用次数等信息的数据文件。
  • 使用gprof命令来分析记录程序运行信息的gmon.out文件,如:gprof test.exe gmon.out则可以在显示器上看到函数调用相关的统计、分析信息。上述信息也可以采用gprof test.exe gmon.out> gprofresult.txt重定向到文本文件以便于后续分析。
其它工具
  • valgrind
  • OProfile
  • sar

待学。。。

扫描二维码关注公众号,回复: 9934410 查看本文章
发布了162 篇原创文章 · 获赞 7 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/LU_ZHAO/article/details/104950768