LINUX下C-C++类软件的诊断
一般C/C++写程序由于内存、指针等问题在后期的过程都一般会遇到内存等资源泄露、崩溃等问题,对于这些问题,一般从哪个角度解决呢?
下面从几个角度进行总结:
内存泄露
首先需要注意一个问题是top或者htop显示的内存使用中cache的问题,这个和windows中的任务管理器看到的有差别。
具体分析如下:
在linux读写文件时,它用于缓存物理磁盘上的磁盘块,从而加快对磁盘上数据的访问。
buffer cache的内容对应磁盘上一个块(block),块通常为1K,都是连续的。在linux下,为了更有效的使用物理内存,操作系统自动使用所有空闲内存作为Buffer Cache使用。当程序需要更多内存时,操作系统会自动减小Cache的大小。我们在观察Linux的内存使用情况时,只要没发现用swap的交换空间,就不必担心自己的内存太少。http://blog.csdn.net/heizistudio/article/details/25125061
如下图,htop显示的数据,其中长时运行时,Mem项有时会使用完了,此时并不表明程序泄露占用,检查真正的进程项目的RES项的内存使用,这个是正在使用的,或者执行 pmap -d 某个进程号,也可以查看

[htop还可以直观的查看线程情况]
有了这些问题,那我们有更好的办法避免吗?答案是:
Ø 智能指针
n C++ 11标准已经有了,stl中的auto_ptr尽量还是避免吧
n boost的share_ptr是常用的
n 双刃剑,使用这个在特定的场景下资源消耗比纯生的new delete效率又损失
文件资源泄露
Ø df -k /##
n 如果某个目录下的操作文件反复读写,可以看到正在使用和已经使用的信息,据此可以查看是否有文件没有关闭
Ø Lsof
n 列出当前系统打开文件的工具
n lsof -p pid
n http://blog.csdn.net/guoguo1980/article/details/2324454
Ø fuser
n 用来显示所有正在使用着指定的file, file system 或者 sockets的进程信息
n http://www.cnblogs.com/yuboyue/archive/2011/07/18/2109838.html
查看网络信息的netstat ss
http://stackoverflow.com/questions/11763376/difference-between-netstat-and-ss-in-linux
http://blog.163.com/xychenbaihu@yeah/blog/static/132229655201222502510543/
procfs
windows下有sysinternals工具,非常方便监控widnows的文件、网络、注册表等的访问;Linux的更厉害的武器,不过都是文件,查看起来有点麻烦,用习惯了功能更强大。
http://blog.csdn.net/jeek566/article/details/8695240
mysql泄露
mysql命令行可以初步查看,如下:
root@csbit:~# mysql -uroot -proot
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 28
Server version: 5.6.21 MySQL Community Server (GPL)
Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show processlist;
+----+-------+-----------+--------+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+-------+-----------+--------+---------+------+-------+------------------+
| 28 | root | localhost | NULL | Query | 0 | init | show processlist |
+----+-------+-----------+--------+---------+------+-------+------------------+
3 rows in set (0.00 sec)
如果show processlist显示的数据不断增多,软件就是有链接泄露,c++处理最好使用cppdb这些有连接池处理的第三方库加速
如果想检查更详细的信息MONyog这个工具可以一用
崩溃分析
泄露分析工具
http://www.cnblogs.com/2018/p/3228174.html
http://www.cnblogs.com/2018/p/3230736.html
linux下发布的执行文件崩溃的问题定位 心得一则
http://www.cnblogs.com/2018/p/3010691.html
http://www.cnblogs.com/2018/archive/2012/05/18/2503897.html
性能调优
问题出来后,如何改善系统性能,此时切记8/2原则,首先修改的是关键路径的部分
http://www.cnblogs.com/2018/p/3380773.html
LINUX下C-C++类软件的诊断的更多相关文章
- linux 下 用phpmailer类smtp发送邮件始终不成功,提示:ERROR: Failed to co
https://zhidao.baidu.com/question/509191264.html?fr=iks&word=PHPMailerSMTP+connect()+failed& ...
- linux下安装与删除软件
linux下安装与删除软件 (2005-07-04 11:24:10) 转载▼ 标签: 杂谈 分类: MSN搬家 现在linuxx下的软件大都是rpm,deb.tar.gz和tar.bz2格式.1.r ...
- 在linux下有没有什么软件可以连接windows上的MSSQL SERVER
在linux下有没有什么软件可以连接windows上的MSSQL SERVER GUI的http://dbeaver.jkiss.org/ http://bbs.csdn.net/topics/391 ...
- linux下如何查看某个软件 是否安装??? 安装路径在哪???
<1>.在linux下如何判断是否已经安装某个软件? 我的系统是red hat 我用命令rpm查是否安装了某个软件(例如: matlab 与 fluent ),得到了如下的结果: 我用rp ...
- PSPP:顶替SPSS常用功能的优秀软件, Linux 下的经济学用软件
几个替代SPSS的软体Salstat http://salstat.sourceforge.net/PSPP http://www.gnu.org/software/pspp/pspp.htmlR h ...
- windows下修复Linux引导 and linux下几个常用软件
在这里,我选择的是deepinLinux,不用说,高端大气上档次! Linux下引导修复 在win7上安装好了Linux,一不小心Linux系统启动不了 (一不小心的过程,想使用root登录图像界面, ...
- Linux下实现C++类的动态链接
1. 背景 在java中,jvm支持类的动态链接(Class.forName(String className)),用起来也很方便.动态链接是实现IOC(Inversion of Control,控制 ...
- linux下源码安装软件
在linux下的很多软件都是通过源码包方式发布的,这样做对于最终用户而言,虽然相对于二进制软件包,配置和编译起来繁琐点,但是它的可移植性却好得多,针对不同的体系结构,软件开发者往往仅需发布同一份源码包 ...
- Linux下安装McAfee防病毒软件(企业版本)
最近公司接一个项目虚拟化解决方案,不过所有硬件设备不是我们采购的,我们只是负责软体安装.我看了一下那个硬件设备那叫高,不过目前还到那边去安装,那边硬件还没安装完成,然后Boss给我拿来两台新服务器,让 ...
随机推荐
- C#设计模式系列:组合模式(Composite)
1.组合模式简介 1.1>.定义 组合模式主要用来处理一类具有“容器特征”的对象——即它们在充当对象的同时,又可以作为容器包含其他多个对象. 1.2>.使用频率 中高 2.组合模式结构图 ...
- 【WP8.1开发】RenderTargetBitmap类的特殊用途
相信,耍过WPF的人都知道RenderTargetBitmap这个玩意儿,这家伙比较有意思,它可以将用户界面上呈现的东西写入到内存的位图对象,从而开发者可以在应用程序中使用它,或者将其保存为图像文件. ...
- 用扩展开发一个PHP类
原文:http://my.oschina.net/mickelfeng/blog/122519?p=1 假设我们要用PHP扩展实 现一个类Person,它有一个private的成员变量$_name和两 ...
- 1Z0-053 争议题目解析134
1Z0-053 争议题目解析134 考试科目:1Z0-053 题库版本:V13.02 题库中原题为: 134.You are managing an Oracle Database 11g datab ...
- JAVA中关于锁机制
本文转自 http://blog.csdn.net/yangzhijun_cau/article/details/6432216 一段synchronized的代码被一个线程执行之前,他要先拿到执行这 ...
- RadioGroup、RadioButton、CheckBox、Toast用法
xml布局文件如下: <RadioGroup android:id="@+id/sex" android:layout_width="wrap_content&qu ...
- 帮公司人事MM做了个工资条拆分工具
引言 偶尔一次午饭时人事说加班加到8点多,纯手工复制粘贴Excel的内容,公司大概150多人吧,每次发工资时都需要这样手动处理,将一个Excel拆分成150多个Excel,再把里面的内容粘过去,如此循 ...
- Windows Phone 8 开发系列(持续更新中)
1. 从应用列表再次点击应用,如何恢复到上次浏览的页面呢? 2. Windows Phone 文本框的 UpdateSourceTrigger 属性不支持 PropertyChanged 怎么办? 3 ...
- MySQL5.7不停业务将传统复制变更为GTID复制
由于GTID的优势,我们需要将传统基于file-pos的复制更改为基于GTID的复制,如何在线变更成为我们关心的一个点,如下为具体的方法: 目前我们有一个传统复制下的M-S结构: port 330 ...
- linux中的通配符与正则表达式
在linux中,有通配符及正则表达式,那么什么是通配符和正则表达式,什么时候用? 通配符 它是由shell解析,并且一般用于匹配文件名,实际上就是shell解释器去解析的特殊符号,linux系统通 ...