一般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++类软件的诊断的更多相关文章

  1. linux 下 用phpmailer类smtp发送邮件始终不成功,提示:ERROR: Failed to co

    https://zhidao.baidu.com/question/509191264.html?fr=iks&word=PHPMailerSMTP+connect()+failed& ...

  2. linux下安装与删除软件

    linux下安装与删除软件 (2005-07-04 11:24:10) 转载▼ 标签: 杂谈 分类: MSN搬家 现在linuxx下的软件大都是rpm,deb.tar.gz和tar.bz2格式.1.r ...

  3. 在linux下有没有什么软件可以连接windows上的MSSQL SERVER

    在linux下有没有什么软件可以连接windows上的MSSQL SERVER GUI的http://dbeaver.jkiss.org/ http://bbs.csdn.net/topics/391 ...

  4. linux下如何查看某个软件 是否安装??? 安装路径在哪???

    <1>.在linux下如何判断是否已经安装某个软件? 我的系统是red hat 我用命令rpm查是否安装了某个软件(例如: matlab 与 fluent ),得到了如下的结果: 我用rp ...

  5. PSPP:顶替SPSS常用功能的优秀软件, Linux 下的经济学用软件

    几个替代SPSS的软体Salstat http://salstat.sourceforge.net/PSPP http://www.gnu.org/software/pspp/pspp.htmlR h ...

  6. windows下修复Linux引导 and linux下几个常用软件

    在这里,我选择的是deepinLinux,不用说,高端大气上档次! Linux下引导修复 在win7上安装好了Linux,一不小心Linux系统启动不了 (一不小心的过程,想使用root登录图像界面, ...

  7. Linux下实现C++类的动态链接

    1. 背景 在java中,jvm支持类的动态链接(Class.forName(String className)),用起来也很方便.动态链接是实现IOC(Inversion of Control,控制 ...

  8. linux下源码安装软件

    在linux下的很多软件都是通过源码包方式发布的,这样做对于最终用户而言,虽然相对于二进制软件包,配置和编译起来繁琐点,但是它的可移植性却好得多,针对不同的体系结构,软件开发者往往仅需发布同一份源码包 ...

  9. Linux下安装McAfee防病毒软件(企业版本)

    最近公司接一个项目虚拟化解决方案,不过所有硬件设备不是我们采购的,我们只是负责软体安装.我看了一下那个硬件设备那叫高,不过目前还到那边去安装,那边硬件还没安装完成,然后Boss给我拿来两台新服务器,让 ...

随机推荐

  1. [C#]想说一说嵌套数组

    今天早上,随感而发,随便写了点东西.结果下午的时候看了看评论,吓我一跳.估计是不是写代码的人看散文看得太少了,还是因为现在的人读的书太少了,似乎有有些大惊小怪. 关于Y美女,我声明一下,尽管她很脱俗, ...

  2. 前端MVC框架Backbone 1.1.0源码分析(二) - 模型

    模型是什么? Models are the heart of any JavaScript application, containing the interactive data as well a ...

  3. WPF自定义控件与样式(2)-自定义按钮FButton

    一.前言.效果图 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 还是先看看效果 ...

  4. 利用Dockerfile构建一个基于centos 7,包括java 8, tomcat 7,php ,mysql+mycat的镜像

    Dockerfile内容如下: FROM centos MAINTAINER Victor ivictor@foxmail.com WORKDIR /root RUN rm -f /etc/yum.r ...

  5. 【记录】ASP.NET MVC AuthorizeAttribute OnAuthorization 验证跳转

    重写 AuthorizeAttribute 的 OnAuthorization 方法: using System.Web.Mvc; namespace Demo.Web.Common { public ...

  6. 分享一段数据库中表数据更新SQL

    应用场景 我们在应用程序开发的时候,经常会遇到这样的一种情况:附属表更新了,主表的数据没有更新,这个关联表不只是外键的关联(通过附属表 ID 关联),主表中还会存在一些附属表的字段,这样一般做的目的是 ...

  7. C算法编程题系列

    我的编程开始(C) C算法编程题(一)扑克牌发牌 C算法编程题(二)正螺旋 C算法编程题(三)画表格 C算法编程题(四)上三角 C算法编程题(五)“E”的变换 C算法编程题(六)串的处理 C算法编程题 ...

  8. WebStorm文件类型关联设置

    无意中创造了一个没有扩展名的文件,我选择了错误的文件类型关联.是js类型的,我却选成了文本,Ws每次编辑类型就成了txt文本,这个问题让我很苦恼,以下是我的解决方案. 错选的弹出框如下: 解决方案如下 ...

  9. geotrellis使用(十二)再记录一次惨痛的伪BUG调试经历(数据导入以及读取瓦片)

    Geotrellis系列文章链接地址http://www.cnblogs.com/shoufengwei/p/5619419.html 目录 前言 BUG还原 查找BUG 解决方案 总结 后记 一.前 ...

  10. 利用GeoWebCache实现WebGIS地形图展示的缓存优化

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.前言 在WebGIS中,影像金字塔是一个很重要的概念.在WebGI ...