LINUX下C-C++类软件的诊断

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: 一般C/C++写程序由于内存、指针等问题在后期的过程都一般会遇到内存等资源泄露、崩溃等问题,对于这些问题,一般从哪个角度解决呢? 下面从几个角度进行总结: 内存泄露 首先需要注意一个问题是top或者htop显示的内存使用中cache的问题,这个和windows中的任务管理器看到的有差别。

一般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 某个进程号,也可以查看

wps100.tmp

[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

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
存储 监控 Linux
linux搭建EwoMail开源邮件服务器软件
linux搭建EwoMail开源邮件服务器软件
33 0
|
17天前
|
Java Linux 开发工具
linux如何编译安装源码包软件
源码包软件是包含源代码的软件包,常见于Linux和BSD系统,如fcitx和Lumaqq。开源软件需满足源代码可见且有宽松许可,如GPL。安装源码包通常涉及解压、编译和安装步骤,使用`tar`命令解包,通过`./configure`, `make`, `make install`进行编译安装。软件源码允许定制和二次开发,但须遵循许可协议。安装前确保安装了必要的开发工具和库。对于perl和python程序,直接使用perl或python命令安装。推荐使用系统软件包管理工具如RPM、yum或apt进行管理,以简化流程。
24 0
|
18天前
|
Linux 数据安全/隐私保护
Linux(12)Debain系统安装远程控制软件
Linux(12)Debain系统安装远程控制软件
25 0
|
2月前
|
安全 Linux 开发者
⭐⭐⭐⭐⭐Linux C/C++ 进程崩溃诊断以及有效数据收集:解锁代码问题快速定位与修复的方法
⭐⭐⭐⭐⭐Linux C/C++ 进程崩溃诊断以及有效数据收集:解锁代码问题快速定位与修复的方法
90 1
|
1天前
|
存储 缓存 Ubuntu
Linux:软件包管理器 - yum
Linux:软件包管理器 - yum
15 2
|
12天前
|
安全 Unix Linux
【专栏】`rmdir`命令在Linux和类Unix系统中用于删除空目录,不适用于非空目录
【4月更文挑战第28天】`rmdir`命令在Linux和类Unix系统中用于删除空目录,不适用于非空目录。基本语法为`rmdir [options] directory...`,常用选项包括`-p`(递归删除空父目录)和`--ignore-fail-on-non-empty`(忽略非空目录错误)。与`rm -r`相比,`rmdir`更安全,适用于知道目录为空的情况。在自动化脚本和清理构建目录等场景中,`rmdir`能有效管理空目录。使用时确保目录为空,避免误删,必要时结合`ls`和`sudo`检查或提升权限。
|
1月前
|
Linux
Linux设备深探:桥接硬件与软件的秘密通道
在Linux的世界里,"设备"这个词汇比你想象的要丰富和多彩得多。让我们一起来探索Linux设备的奥秘,理解它们是如何在Linux操作系统中发挥作用的。🐧✨
Linux设备深探:桥接硬件与软件的秘密通道
|
2月前
|
缓存 Linux Android开发
【Linux】软件包管理器 yum
【Linux】软件包管理器 yum
|
2月前
|
存储 Ubuntu Unix
【Linux】1、操作系统、计算机硬件和软件、Linux 介绍
【Linux】1、操作系统、计算机硬件和软件、Linux 介绍
43 0
|
3月前
|
Linux Windows
【Linux】Linux 软件包管理器 yum
【Linux】Linux 软件包管理器 yum
【Linux】Linux 软件包管理器 yum