Linux环境下C++程序问题诊断与调优总结

本文总结了Linux环境下C++程序在CPU、磁盘IO、网络IO和内存方面的问题诊断与调优方法。包括:使用gdb调试、分析CPU负载、磁盘IO性能、网络连接状况及内存泄漏等问题,提供了如iostat、iotop、netstat、valgrind等工具的使用技巧,以及如何处理锁冲突和内存管理。通过对系统性能的全面分析,有助于提高程序效率和系统稳定性。
摘要由CSDN通过智能技术生成

1、 CPU问题

  • 机器负载高
  • CPU消耗高
  • 响应时耗高
  • 资源消耗低,但是压力上不去
  • 上下文切换频繁,cache miss率高
  • 锁冲突严重

CPU问题分析总结

粗看系统负载情况: uptime,vmstat 开发测试环境+线上环境
机器实时的CPU资源消耗详细情况top 开发测试环境+线上环境
分析系统调用: strace 开发测试环境
分析函数的热点:perf,可以输出成火焰图便于直观观察 开发测试环境+线上环境
分析各个线程的资源消耗情况,线程内的函数消耗情况: valgriand 开发测试环境
分析程序各个线程的堆栈执行情况: pstack & pt-pmp 开发测试环境

2、磁盘IO问题

  • IO消耗太多,引起系统影响慢
  • 大量随机IO
  • 句柄泄漏
  • swap引起系统响应变慢
  • 写入磁盘的数据丢失,磁盘损坏等

使用dd和fio测试IO的性能4.iostat输出结果会解读
iotop观察具体进程IO的消耗情况
通过proc文件系统和lsof分析句柄的使用,定位是否有句柄泄漏,某个句柄具体对应哪个文件

3、网络IO问题

  • 网络不通
  • 延时大
  • 网络超时,丢包
  • 连接异常
  • 大量无效连接
  • 网卡跑满
  • CPU处理网卡中断繁忙

1.通过netstat查看网络连接状况
2.lsof分析具体端口被谁占用
3.通过sar查看网卡流量
4.利用tcpdump& wireshark进行网络包的分析

4、内存问题

  • 内存消耗多,内存泄漏,内存碎片
  • 内存分配回收性能差
  • 内存越界,空指针,野指针
  • 系统coredump或者数据异常

1.C++开发的时候必须掌握智能指针
2.熟练使用valgriand分析内存泄漏
3.了解多线程内存库jemalloc/tcmalloc
4.free的输出结果会解读
5.建议关闭swap
6.熟悉/proc/sys/vm/下的参数,比如控制刷脏页的频率,脏页占有量,swappinness等

其他

程序调试工具gdb

gdb∶常见的调试入口信息

  1. gdb ./testperf通过调试的方式启动程序
  2. gdb-p 81369对指定的进程进行调试
  3. gdb testperf core-testperf-52784-1555319546程序异常退出产生core,可以用来调试

[译]Linux性能分析的前60000毫秒

总结

1.假如运营人员突然反馈你负责的系统响应变慢,并给出了具体的IP机器,如何分析问题
回答:
系统响应变慢,说明系统内的机器负载较高,对CPU的消耗也在增高,此时我可以从以下几个步骤对具体IP的机器进行测试:

&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

淮杨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值