Linux C++服务端开发教程(四) 内存泄露检查

2023-05-16

如何知道内存泄漏

我们如果不去特意查内存泄漏,实际上是很难发现的,因为这个程序即使发生内存泄漏,他也不会有任何特征(泄漏速度不是很快), 知道某一天, 我们发现系统运行变慢了,或者出现了其它莫名其妙的问题,等到我们把系统重启,发现整个程序运行又正常了,这大致就是内存泄漏遇见我们时,玩的捉迷藏游戏。因为程序是一个动态运行的过程,所以我们很难发现一定就内存泄漏了,那可以先用top命令跟踪下某个进程,哦先来了解top命令: 

在终端上敲入top命令,显示结果如下:

top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。top是一 个动态显示过程。即可以通过用户按键来不断刷新当前状态。如果在前台执行该命令,它将独占前台。直到用户终止该程序为止,比较准确的说,top命令提供了实时的对系统处理器的状态监视。它将显示系统中CPU最敏感的任务列表。该命令可以按CPU使用内存和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定。

●第一行
。16:19:51 :系统当前时间
。up9 days, 22:22 :系统开机到现在经过了多少时间
。2users :当前两个用户在线
。1.14. 0.73, 0.32 :系统1分钟、5分钟、15分钟的CPU负载信息
●第二行
。Tasks :任务
。105 total :很好理解,就是当前有87个任务,也就是87个进程。
。2 running :两个进程正在运行
。73 sleeping : 73个进程正在休眠
。0 stopped: 停止的进程数
。0 zombie: 僵尸进程数
●第三行
。%Cpu(s):表示这- -行显示CPU总体信息
。100.0 us:用户态进程占用CPU时间百分比,不包含renice值为负的任务占用的CPU的时间。
。0.0 sy: 内核占用CPU时间百分比
。0.0 ni: 改变过优先级的进程占用CPU的百分比
。0.0id: 空闲CPU时间百分比
。0.0 wa:等待I/O的CPU时间百分比
。0.0 hi: CPU硬中断时间百分比
。0.0 si: CPU软中断时间百分比
。0.0st: 注:这里显示数据是所有cpu的平均值,如果想看每一个cpu的处理情况,按1即可; 
折叠,再次按1;
●第四行
。Mem :内存的信息
。2041248 total:物理内存总量
。71508 free: 空闲的物理内存量
。706876 used:使用的物理内存量
。1262864 buff/cache :用作内核缓存的物理内存量
●第五行
。Swap: 虚拟内存使用(交换空间)
。0 total: 交换区总量
。Ofree: 空闲
。Oused:使用
。1140696 avail Mem :缓存交换空间以下就是是以列显示的进程。不同的列代表下面要解释的不同属性。默认.上,top显示这些关于进程的属性:
●PID:进程ID,进程的唯一 标识符
●USER:进程所有者的实际用户名。
●PR:进程的调度优先级。这个字段的一些值是rt。 这意味这这些进程运行在实时态。
●NI:进程的nice值 (优先级)。越小的值意味着越高的优先级。
●VIRT:进程使用的虚拟内存。
●RES:驻留内存大小。驻留内存是任务使用的非交换物理内存大小。
●SHR: SHR是进程使用的共享内存。
●S:这个是进程的状态。它有以下不同的值:
。D-不可中断的睡眠态。
。R-运行态
。S-睡眠态
。T-被跟踪或已停止
。Z-僵尸态
●%CPU:自从上- -次更新时到现在任务所使用的CPU时间百分比。
●%MEM:进程使用的可用物理内存百分比。
●TIME+:任务启动后到现在所使用的全部CPU时间,精确到百分;之一秒。
●COMMAND:运行进程所使用的命令。

下面列出一些常用的top命令操作指令
●q:退出top命令
●\:立即刷新
●s:设置刷新时间间隔
●c:显示命令完全模式
●t:: 显示或隐藏进程和CPU状态信息
●m:显示或隐藏内存状态信息
●|:显示或隐藏uptime信息
●f:增加或减少进程显示标志
●S:累计模式,会把已完成或退出的子进程占用的CPU时间累计到父进程的MITE+
●P:按%CPU使用率排行
●T:按MITE+排行
●M:按%MEM排行
●u:指定显示用户进程
●r:修改进程renice值
●kkil: 进程
●i:只显示正在运行的进程
●W:保存对top的设置到文件/.toprc, 下次启动将自动调用toprc文件的设置。
●h:帮助命令。
●q:退出
●注:强调一下,使用频率最高的是P、T. M,因为通常使用top,我们就想看看是哪些进程最耗cpu
资源、占用的内存最多:注:通过"shift + >"或"shift + \<可以向右或左改变排序列如果只需要查
看内存:可用free命令。只查看uptime信息 (第-行),可用uptime命令;
从以上的介绍我们可以清楚的指导top命令其实可以干很多的事情,比如CPU信息,比如中断信息
等等,当然我们也可以使用free和vmstat命令查询可用内存,那么-般我们持续观察某个进程或者相关
的进程的内存使用情况,如果内存使用量持续或者螺旋震荡向上增长,那么很有可能发生了内存泄漏。
调试和观察手段除了这些实际上还有很多,比如pstack. strace. ipcs. iostat. sar和netstat等等。

技术架构

关注公众号:《码之有道》,一起聊游戏全栈开发!

1、公众号回复:【教程】获取零基础游戏开发客户端+服务端全套教程。
2、公众号回复:【实战】获取企业级实战项目。
3、公众号回复:【资料】获取大学四年整理的所有自学资料。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux C++服务端开发教程(四) 内存泄露检查 的相关文章

  • C++快读、快写模板

    inline int Read int res 61 0 ch flag 61 0 if ch 61 getchar 61 61 39 39 flag 61 1 else if ch gt 61 39 0 39 amp amp ch lt
  • JavaScript算法---排序(冒泡排序)【1】

    冒泡排序 xff1a 比较任何两个相邻的项 xff0c 如果第一个比第二个大则交换位置 原理如下图 xff1a 比较相邻 xff0c 就好像气泡上升到表面 xff0c 因此而得名 冒泡 代码 xff1a 冒泡排序 var BubbleSor
  • Angular中锚点的几种方法

    项目现象 xff1a 在静态页面中往往需要点击某个按钮跳转到当前页面的某个地方 实现 xff1a 方法一 xff1a xff08 不推荐 xff09 页面 lt button click 61 34 goDistance 39 distan
  • autocomplete="off",失效禁止浏览器默认填充的解决方案总结

    现象 xff1a 浏览器有自动记住密码的功能 xff0c 当场景是注册账号等表单的时候会自动填充 默认的解决方案 xff1a 在form与input上添加autocomplete 61 off xff0c 但是在很多浏览器上不起作用 其他方
  • Git操作 ---分支库操作与整体git开发流程(二)

    分支操作 相当于流水线 xff0c 互不干扰的 查看分支 git branch 创建切换分支 git checkout b 分支名 切换分支 git checkout 分支名 分支合并 git merge 分支名 将分支名的分支合并的当前分
  • IDEA中拉取SVN代码报错 svn: E230001

    IDEA中拉取 提交SVN代码报错 Error svn E170013 Unable to connect to a repository at URL https 172 168 11 142 svn xxx svn E230001 Se
  • Anaconda之通过可视化界面配置虚拟环境

    网上有不少anaconda配置虚拟环境的教程 xff0c 但大多数都是在Anaconda Prompt通过命令来完成 这种方式对于新手来说有点不友好 为贴合普通人一直以来的习惯 xff0c 这里介绍一种通过可视化界面来配置环境 xff08
  • 在ubuntu中安装filezilla及解决 Ubuntu E:无法定位软件包问题

    本文是自己在在ubuntu中安装filezilla遇到问题整理而成的笔记 xff0c 记录下来 xff0c 以便日后查找 本文主要是由以下博文整理而成 xff0c 感谢各位博主 xff1a xff08 1 xff09 windows主机和u
  • ubuntu22.04 配置共享文件夹 找不到/mnt/hgfs

    兴致勃勃地在虚拟机里安装好了Ubuntu 22 04 xff0c 添加共享文件夹 xff0c 结果在 mnt竟然没有hgfs这个文件夹 xff0c 更不好说共享的文件夹winShare 然后上网查怎么搞 xff0c 一顿操作猛如虎啊 xff
  • Linux命令行更改连接wifi及更改网络配置

    1 查看网络 命令 xff1a ifconfig 结果 lo flags 61 73 lt UP span class token punctuation span LOOPBACK span class token punctuation
  • CA 证书的签发过程

    https blog csdn net qq 22771739 article details 86479411 ops request misc 61 257B 2522request 255Fid 2522 253A 252216157
  • C++构造函数

    文章目录 1 构造函数的定义及特征2 默认构造函数2 1 合成的默认构造函数2 1 1 默认初始化2 1 2 合成的默认构造函数初始化类成员变量的规则2 1 3 有些场合不能使用合成的默认构造函数 2 2 全缺省的默认构造函数 xff08
  • 在IDEA中创建maven项目编写java代码操作HDFS集群

    一 安装win10编译过的hadoop 1 将编译好的hadoop包放在非中文目录 2 配置HADOOP HOME环境变量 3 将hadoop包的bin目录加到PATH环境变量中 二 在idea中创建一个maven项目 1 创建maven项
  • 远程windows蓝屏解决办法

    电脑远程服务器的时候 xff0c 手欠在服务器上把explorer exe这个进程关闭了 然后 xff0c 远程桌面就蓝屏了 xff0c 什么都显示不出来 如果蓝屏查看是不是没有这个进程了 基本有以下几种解决方法 xff1a 使用远程桌面
  • 使用IIS部署PHP网站

    接到通知 xff0c 需要将云服务器上的PHP网站部署到自己的Windows服务器上 反驳无效 xff0c 动手就干 0 准备工作 0 Windows Server 2012R2 1 IIS8 2 PHP CGI xff08 FastCGI
  • 崩溃的Python学习过程2——ImportError: No module named PIL(windows)

    xff08 注 xff1a win7 Ecilipse Python2 7 13 xff09 没有第三方模块问题 xff0c 在unbuntu的话直接 pip install Pillow 就可以了 xff0c 现在是Windows goo
  • 多个路由共用一个页面,路由间切换时页面刷新问题

    路由 userAudit和 userManage共用了同一个view xff0c table有selection a b c 操作五个列 xff0c userManage显示a c 操作三列 xff1b userAudit显示selecti
  • el-dialog中表单校验问题:第二次打开时会触发校验

    当required属性为变量时 xff0c rules规则应写在el form item项上 xff0c 如果写在el form上 xff0c 则第二次打开dialog时会触发校验并且显示校验结果 eg 假设有单选项type xff0c 枚
  • vue 自定义全屏组件

    1 FullScreen vue lt template gt lt span class 61 34 full screen 34 64 click 61 34 toggleFullScreen 34 gt lt span gt lt t
  • 企业微信小程序开发者登录结果不对问题

    1 调试 微信开发工具调试企业微信小程序 下载企微插件 设置 gt 扩展设置 gt 模拟器插件 gt 企业微信小程序模拟器 更改运行模式 选择企业微信小程序模式 2 账号 由于微信开发工具只能使用微信扫码登录 xff0c 所以必须使用登录微

随机推荐

  • python提取pdf表格数据并保存到excel(从0到1)

    win11安装python python org 下载安装包 xff08 64位操作系统 xff0c 所以选了3 7 4 windows x86 64 executable installer下载并安装 xff09 win 43 r 打开c
  • 0 Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by se

    nodejs连接mysql8 0 32版本报错 xff1a 0 Error ER NOT SUPPORTED AUTH MODE Client does not support authentication protocol request
  • git基本命令

    1 克隆服务器上的项目 git clone http 2 设置Git git config global user name 34 your username 34 git config global user email your ema
  • 推荐WPF的好书

    WPF好书榜 注 xff1a 以前发过一篇博文 WPF技术书籍之个人排行榜 xff0c 时隔大半年 xff0c 我又看了一些 xff0c 现向大家推荐一下其中的好书 这几本书我从头到尾都看过 xff0c 其中的示例也都一一运行分析过 xff
  • angularjs设置请求头信息

    本文部分转自 xff1a http blog csdn net magiclr article details 49643277 最近开发中遇到一个问题 xff0c 需要在模块A发出的请求头信息中添加token属性 如图所示 xff1a 简
  • angularjs 正则判断用户输入的内容只能是数字或者字母

    lt input span class hljs keyword class span 61 span class hljs string 34 form control 34 span placeholder 61 span class
  • echarts 力导向图

    首先放上大佬文章链接 xff1a http blog csdn net u010430471 article details 52955131 https www cnblogs com koala2016 archive 2016 12
  • echarts力导向图区分鼠标点击事件与拖拽事件(angularjs)

    使用echarts的力导向图做了一个知识图谱 xff0c 要求点击节点的时候 xff0c 把节点的数据作为关键词搜索 知识图谱 xff0c 以前没做过 xff0c 也不知道用什么好 xff0c 百度了一下看到有人说用echarts可以做 x
  • 2018前端笔试面试题整理

    最近好几个前端的朋友都在换工作 xff0c 根据她们的面试经验整理了一些前端笔试面试题 毕竟人少 xff0c 面的公司也少 xff0c 所以并不全面 开放性题目 xff1a 1 你在现在的团队处于什么样的角色 xff0c 起到了什么明显的作
  • docker容器网络

    在安装docker时 xff0c 会自动在host主机上创建三个网络 xff0c 用docker network ls可以进行查看 xff1a docker network ls NETWORK ID NAME DRIVER SCOPE b
  • IOS开发入门(11)-导航控制器(1)

    IOS开发入门 xff08 11 xff09 导航控制器I xff1a 层级结构和标签 前言 xff1a xff08 直接从书上抄的 xff09 大多数应用程序是由主视图导出多个屏幕 xff0c 并且通常情况下实现屏幕切换的方法还不止一种
  • IOS开发入门(12)-表视图I:基础知识

    IOS开发入门 xff08 12 xff09 表视图I xff1a 基础知识 在前面几部分中 xff0c 主屏幕只能展示一个汽车对象的信息 而在实际iOS中 xff0c 一次显示多条数据并实现滚动查看是十分常见的 xff0c 例如通讯录 音
  • C语言基础专题 - 头文件引用

    C语言基础专题 头文件引用 jcLee的个人博客 xff1a https blog csdn net qq 28550263 spm 61 1001 2101 3001 5343 邮箱 xff1a 291148484 64 163 com
  • Vue3 配置代理和使用全局axios请求数据

    更详细请参考 xff1a https blog csdn net qq 28550263 article details 120633610 vue3中配置全局代理和使用axios向服务器请求数据 main ts span class to
  • ros(13):ros找不到包报错及解决办法--Config.cmake

    目录 一 基础包 1 1 rospy包 1 2 tf包 1 3 grid map包 1 4 serial 二 专有包 2 1 dynamic reconfigure包 2 2 rosparam handler包 2 3 qt build包
  • 使用Java实现高效的字符串匹配算法

    摘要 xff1a 字符串匹配是计算机领域中的一个重要问题 xff0c 有着广泛的应用场景 在本篇博客文章中 xff0c 我们将介绍几种高效的字符串匹配算法 xff0c 并给出使用Java语言实现的代码示例 xff0c 希望能对读者理解和应用
  • WebDAV是什么

    WebDAV学习及使用 WebDAV是什么WebDEV怎么用各个设备连接1 Window2 MAC WebDAV是什么 基于Web的分布式编写和版本控制 xff08 WebDAV xff09 是超文本传输协议 xff08 HTTP xff0
  • 【计算机基础】整数的补码表示及负整数的左右移

    作者 xff1a LogM 本文原载于 https segmentfault com u logm articles xff0c 不允许转载 文章难免有错误之处 xff0c 请在原文评论处指出 1 补码的表示形式 计算机中整数用补码表示 举
  • Linux 获取内存页大小

    如何查看Linux系统的内存页大小 xff1a 1 getconf PAGESIZE PAGE SIZE 返回值单位为Bytes 点击 此处 折叠或打开 root 64 localhost nginx 1 8 0 getconf PAGES
  • Linux C++服务端开发教程(四) 内存泄露检查

    如何知道内存泄漏 我们如果不去特意查内存泄漏 xff0c 实际上是很难发现的 xff0c 因为这个程序即使发生内存泄漏 xff0c 他也不会有任何特征 泄漏速度不是很快 xff0c 知道某一天 xff0c 我们发现系统运行变慢了 xff0c