【内存问题真的很烦人】linux内存等资源管理 以及 linux内存不足解决办法

news2024/12/25 15:11:22

linux内存不足解决办法

///这一部分存在疑问

查看目录下文件夹大小

du -h --max-depth=1 

看具体哪个文件夹占用内存过高,一般是日志,删除即可。
在这里插入图片描述

///这一部分存在疑问,上面的文件夹可以代表内存吗?

内存不够

top 命令 看内存占用情况
若buff/cache占用过高,则执行以下命令清缓存(需ROOT权限)
在这里插入图片描述

先执行sync,先把buffe中的数据先写入到硬盘中。
echo 1 > /proc/sys/vm/drop_caches:表示清除pagecache。
echo 2 > /proc/sys/vm/drop_caches:表示清除回收slab分配器中的对象(包括目录项缓存和inode缓存)。slab分配器是内核中管理内存的一种机制,其中很多缓存数据实现都是用的pagecache。
echo 3 > /proc/sys/vm/drop_caches:表示清除pagecache和slab分配器中的缓存对象。

此处请参考:

echo N>/proc/sys/vm/drop_caches清理缓存_echo >1 /proc/_persistent_db的博客-CSDN博客

查看内存占用top10

ps auxw|head -1;ps auxw|sort -rn -k3|head -10
经过以上步骤,再次查看内存
在这里插入图片描述
 

Linux中top信息 

一.信息显示
Linux系统可以通过top命令查看系统的运行状态,包括负载,内存使用(交换分区),CPU使用、当前运行的线程,进程等信息。

[root@localhost home]# top -help
  procps-ng version 3.3.10
Usage:
  top -hv | -bcHiOSs -d secs -n max -u|U user -p pid(s) -o field -w [cols]

参数说明:

  • d 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。
  • p 通过指定监控进程ID来仅仅监控某个进程的状态。
  • q 该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。
  • S 指定累计模式
  • s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。
  • i 使top不显示任何闲置或者僵死进程。
  • c 显示整个命令行而不只是显示命令名

执行top,可以看到某一时刻,系统的运行状况,默认在3秒后刷新显示,这个可以动态设置(上面的 -d 参数)。

[root@localhost home]# top 

top - 11:09:00 up 324 days, 17:24,  1 user,  load average: 0.38, 0.38, 0.37
Tasks: 136 total,   1 running, 135 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.9 us,  0.5 sy,  0.0 ni, 98.5 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 16267100 total,  1142448 free,  7907452 used,  7217200 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  7969352 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 5466 elastic+  20   0 7503920 1.508g  39564 S   4.0  9.7   4:46.62 java
 9544 root      20   0 1306232 190444   6404 S   2.0  1.2   4425:19 mongod
  314 root      20   0  9.767g 2.185g  15568 S   1.3 14.1  48:34.56 java
12447 kibana    20   0 1293128 116832   7316 S   1.0  0.7   1061:09 node
28899 root      20   0  134904   9940   5288 S   1.0  0.1   1120:54 AliYunDun
10170 root      20   0 2025680  60264   4848 S   0.7  0.4   3641:19 mongod
  315 root      20   0       0      0      0 S   0.3  0.0 233:17.75 jbd2/vda1-8
 5328 root      20   0 9870984 281836  16864 S   0.3  1.7   0:20.55 java
 5620 root      20   0  157720   2256   1556 R   0.3  0.0   0:01.57 top
10737 root      20   0  138976   9636   1204 S   0.3  0.1   1236:17 redis-server
10751 root      20   0  141024  11624   1080 S   0.3  0.1 764:46.02 redis-server
10757 root      20   0  136924   7752   1308 S   0.3  0.0   1305:56 redis-server
10764 root      20   0  175840  41360   1348 S   0.3  0.3 781:07.92 redis-server
10769 root      20   0  175840  46616   1300 S   0.3  0.3 760:02.02 redis-server
10775 root      20   0  136928   7652   1204 S   0.3  0.0   1220:41 redis-server
17817 mysql     20   0 3872248 346428   6344 S   0.3  2.1  56:03.08 mysqld
    1 root      20   0   43600   3416   1880 S   0.0  0.0   6:32.62 systemd
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.08 kthreadd
    3 root      20   0       0      0      0 S   0.0  0.0   0:33.96 ksoftirqd/0
    5 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H
    7 root      rt   0       0      0      0 S   0.0  0.0   0:02.52 migration/0
    8 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcu_bh
    9 root      20   0       0      0      0 S   0.0  0.0   1298:19 rcu_sched
   10 root      rt   0       0      0      0 S   0.0  0.0   3:05.07 watchdog/0
   11 root      rt   0       0      0      0 S   0.0  0.0   2:42.85 watchdog/1
   12 root      rt   0       0      0      0 S   0.0  0.0   0:02.70 migration/1
   13 root      20   0       0      0      0 S   0.0  0.0   0:40.06 ksoftirqd/1
   15 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/1:0H
   16 root      rt   0       0      0      0 S   0.0  0.0   2:40.06 watchdog/2
   17 root      rt   0       0      0      0 S   0.0  0.0   0:03.58 migration/2
   18 root      20   0       0      0      0 S   0.0  0.0   0:36.39 ksoftirqd/2
   20 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/2:0H
   21 root      rt   0       0      0      0 S   0.0  0.0   2:38.38 watchdog/3
   22 root      rt   0       0      0      0 S   0.0  0.0   0:03.58 migration/3
   23 root      20   0       0      0      0 S   0.0  0.0   0:33.11 ksoftirqd/3
   25 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/3:0H

第一行:这行显示的信息与命令uptime显示的信息相同

  top - 11:09:00 up 324 days, 17:24, 1 user, load average: 0.38, 0.38, 0.37

对应的信息:系统当前时间 up 系统到目前为止运行的时间, 当前系统的登陆用户数量,load average后面的三个数字分别表示距离现在一分钟,五分钟,十五分钟的负载情况。 

注意:load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。

第二行:任务进程

Tasks: 136 total,   1 running, 135 sleeping,   0 stopped,   0 zombie

对应的信息:tasks表示任务(进程),136则表示现在有136个进程,其中处于运行中的有1个,135个在休眠(挂起),stopped状态即停止的进程数为0,zombie状态即僵尸的进程数为0个。

第三行:CPU状态信息

%Cpu(s):  0.9 us,  0.5 sy,  0.0 ni, 98.5 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

依次对应:

us——用户空间(user)占用cpu的百分比
sy——内核空间(system)占用cpu的百分比
ni——改变过优先级(niced)的进程占用cpu的百分比
id——空闲(idolt)CPU百分比
wa——IO等待(wait)占用cpu的百分比
hi——IRQ 硬中断(Hardware)占用cpu的百分比
si——软中断(software)占用cpu的百分比
st——被hypervisor偷去的时间

第三行和第四行:当前内存状态信息, 单位都是KiB

KiB Mem : 16267100 total, 1142448 free, 7907452 used, 7217200 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 7969352 avail Mem

显示的信息与命令 free 显示的信息相同

对应信息:

Mem:物理内存总量(16G)
free: 空闲内存总量(1G)
used: 使用中的内存总量
buff/cache: 用作内核缓存的内存量

注:使用中的内存总量(used)指的是现在系统内核控制的内存数,空闲内存总量(free)是内核还未纳入其管控范围的数量。纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不用为此担心,

buff/cached代表了buff和cache总共用了多少,buff代表buffer cache占了多少空间,由于它主要用来缓存磁盘上文件的元数据,所以一般都比较小,跟cache比可以忽略不计;

cache代表page cache和其它一些占用空间比较小且大小比较固定的cache的总和,基本上cache就约等于page cache,page cache的准确值可以通过查看/proc/meminf中的Cached得到。由于page cache是用来缓存磁盘上文件内容的,所以占有空间很大,Linux一般会尽可能多的将空闲物理内存用于page cache。

Swap: 交换区总量
free:空闲交换区总量
used: 使用的交换区总量
avail Mem:表示可用于进程下一次分配的物理内存数量,这个大小一般比free大一点,因为除了free的空间外,系统还能立即释放出一些空间来。

对于内存监控,在top里我们要时刻监控swap交换分区的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了。正常情况下swap应该很少被使用,used值比较大说明交换空间被使用的比较多,如果通过vmstat命令看到swap in/out的比较频繁的话,说明系统内存严重不足,整体性能已经受到严重影响

此处可参考:

Linux系统设置swap大小,创建swap,top虚拟内存,VIRT RES SH_linux设置swap空间_Michaelwubo的博客-CSDN博客

最后为进程信息区

top命令第七行,各进程的监控:

PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND

依次对应:
PID — 进程id
USER — 进程所有者
PR — 进程优先级
NI — nice值。负值表示高优先级,正值表示低优先级
VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR — 共享内存大小,单位kb
S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU — 上次更新到现在的CPU时间占用百分比
%MEM — 进程使用的物理内存百分比
TIME+ — 进程使用的CPU时间总计,单位1/100秒
COMMAND — 进程名称(命令名/命令行)

使用c++的请参考:

linux 进程virt、res内存分析_virt res_爆破小能手的博客-CSDN博客

这里请参考:

理解virt res shr之间的关系 - linux_virt res shr 和 xmx关系_haima1998的博客-CSDN博客

二.交互命令
1.1 ‘h’ 帮助
top命令进入视图后,键入h会显示如下界面,显示交互命令的帮助菜单


1.2 敲ENTER或者 SPACE键: 刷新显示

1.3 A’: 切换交替显示模式
top命令视图下,键入‘A‘显示如下:

显示4个窗口:Def (默认字段组)
Job (任务字段组)
Mem (内存字段组)
Usr (用户字段组)
四组字段共有一个独立的可配置的概括区域和它自己的可配置任务区域。4个窗口中只有一个窗口是当前窗口。当前窗口的名称显示在左上方。(注:只有当前窗口才会接受你键盘交互命令)
我们可以用’a’和’w’在4个 窗口间切换。’a’移到后一个窗口,’w’移到前一个窗口。用’g’命令你可以输入一个数字来选择当前窗口。
在键入‘A‘后在键入‘a‘的显示如下:


1.4 ‘B’: 触发粗体显示
一些重要信息会以加粗字体显示。这个命令可以切换粗体显示

1.5 ‘d’ 或‘s’: 设置显示的刷新间隔
当键下’d’或’s’时,你将被提示输入一个值(以秒为单位),它会以设置的值作为刷新间隔。如果你这里输入了6.0,top将会每秒刷新


1.6 ‘l’、‘t’、‘m’: 切换负载、任务、内存信息的显示

1.7 ‘f’: 字段管理
用于选择你想要显示的字段。用’*’标记的是已选择的。

上下光标键在字段内导航,左光标键可以选择字段,回车或右光标键确认。

按’<’移动已排序的字段到左边,’>’则移动到右边。

1.8 ‘R’: 反向排序

1.9 ‘c’: 触发命令
切换是否显示进程启动时的完整路径和程序名。

键入‘c’后显示:


2.0 ‘i’: 空闲任务
切换显示空闲任务

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/671583.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python就业前景如何?三大就业岗位分享

Python是一门面向对象的编程语言&#xff0c;编译速度超快&#xff0c;从诞生到现在已经20来个年头了。Python的排名从去年开始就借助人工智能持续上升&#xff0c;Python的火热&#xff0c;也带动了工程师们的就业热。 据统计&#xff0c;现在初级Python工程师的起薪一般在10…

【 Lucas-Kanade光流法】

这里写目录标题 1.1 Lucas-Kanade光流法1.1 Lucas-Kanade光流法详细步骤&#xff1a; 1.1 Lucas-Kanade光流法 Lucas-Kanade光流法是一种密集光流估计方法&#xff0c;用于计算图像中每个像素的运动向量。它假设在相邻帧之间&#xff0c;像素的灰度值不会发生大的变化&#xf…

《网络安全0-100》双钥加密体制

双钥加密体制 怎么说 没找着公钥加密在哪&#xff0c;所以就接着写了。 公钥加密&#xff0c;也叫非对称(密钥)加密&#xff0c;属于通信科技下的网络安全二级学科&#xff0c;指的是由对应的一对唯一性密钥(即公开密钥和私有密钥)组成的加密方法。它解决了密钥的发布和管理…

【ArcGIS】使用ArcGIS进行坡度分析

使用ArcGIS进行坡度分析 1 数据来源2 操作步骤参考 坡度是指过地表面任意一点的切平面与水平地面之间的夹角。坡度用来计算任–单元和邻域单元间变化的最大比率&#xff0c;如单元下降最陡的坡面(单元和它相邻单元间的高程距离的最大变化率)。 坡度分析是计算两相邻像元间的数值…

STM32的时钟系统(嵌入式学习)

STM32的时钟系统 时钟的基本概念时钟系统的组成时钟源晶体振荡器和RC振荡器的区别晶体振荡器RC振荡器 STM32G030时钟源时钟树STM32CubeMX时钟树配置 时钟的基本概念 时钟是指用于计量和同步时间的装置或系统。时钟是嵌入式系统的脉搏&#xff0c;处理器内核在时钟驱动下完成指…

Goby 漏洞发布|PandoraFMS 软件 upload_head_image.php 任意文件上传漏洞

漏洞名称&#xff1a;PandoraFMS 软件 upload_head_image.php 任意文件上传漏洞 English Name&#xff1a;PandoraFMS upload_head_image.php Arbitrary File Upload Vulnerability CVSS core: 9.0 影响资产数&#xff1a;768 漏洞描述&#xff1a; PandoraFMS是美国Pando…

【Python】文件操作 ④ ( 文件操作 | 向文件写出数据 | 使用 write 函数向文件中写出数据 | 使用 flush 函数刷新文件数据 )

文章目录 一、向文件写出数据1、使用 write 函数向文件中写出数据2、使用 flush 函数刷新文件数据3、代码示例 - 使用 write / flush 函数向文件中写出数据 一、向文件写出数据 1、使用 write 函数向文件中写出数据 Python 中 通过 调用 write 函数 向文件中写入数据 ; 语法如下…

Fiddler抓包工具之fiddler的常用快捷键

一、常用三个快捷键 ctrlX :清空所有记录 CtrlF&#xff1a;查找 F12&#xff1a;启动或者停止抓包 使用 QuickExec Fiddler2 成了网页调试必备的工具&#xff0c;抓包看数据。Fiddler2自带命令行控制。 fiddler 命令行快捷键&#xff1a;ctrl q &#xff0c;然后 输入 help…

记一次杀猪盘网站渗透

1、首先访问杀猪盘主站。 2、通过扫描子域名找到后台管理系统。 3、对其后台的登录接口进行测试&#xff0c;发现接口的用户名参数存在sql注入&#xff0c;直接跑数据。 4、注入得到后台的账密如下,用户名和safecode是明文的&#xff0c;password使用自定义加密。 跑出来了账号…

PaaS2.0、Matter、AIGC、新能源…TUYA开发者大会亮点抢先看

6月29日&#xff0c;TUYA开发者大会&#xff08;深圳&#xff09;即将开幕。作为业内备受关注的盛会&#xff0c;大会的各种“路透”消息络绎不绝。那么TUYA开发者大会将呈现哪些精彩&#xff0c;我们带大家一探究竟。 亮点1&#xff1a;IoT行业风向标 积蓄2年的硬核分享 TUYA…

【Ribbon实现客户端负载均衡和故障转移】—— 每天一点小知识

&#x1f4a7; R i b b o n 实现客户端负载均衡和故障转移 \color{#FF1493}{Ribbon实现客户端负载均衡和故障转移} Ribbon实现客户端负载均衡和故障转移&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是行人.✨ &#x1f984; 个人主页——微风撞见云的博客…

掌握会议任务追踪技巧,提高会议效率!

跟踪会议任务是有效项目管理的重要组成部分。会议可以产生许多需要完成的行动项目和任务&#xff0c;如果没有适当的跟踪&#xff0c;这些任务很容易被遗漏。在本文中&#xff0c;我们将概述如何有效地跟踪会议任务。 1、在会议中分配任务 在会议期间&#xff0c;将任务分配给特…

眼球交互vs眼疲劳,前Vision Pro设计师揭秘这些细节

Vision Pro的发布带来了众多讨论&#xff0c;从交互层面来看&#xff0c;它真正的将AR/VR的首选交互从手柄转移到手势眼球上面来&#xff0c;此前的AR、VR大部分还是通过手柄来完成交互&#xff08;HoloLens除外&#xff09;&#xff0c;手势交互是它们的第二选择。 交互方式主…

leetcode847. 访问所有节点的最短路径

847. 访问所有节点的最短路径 状态压缩 这是一个等权无向图&#xff0c;题目要我们求从「一个点都没访问过」到「所有点都被访问」的最短路径。 同时1 < n < 12, n 最大只有 12&#xff0c;容易想到使用「状态压缩」来代表「当前点的访问状态」&#xff1a;使用二进制表…

Windows下部署Appium教程(Android App自动化测试框架搭建)

摘要: 1&#xff0c;appium是开源的移动端自动化测试框架&#xff1b; 2&#xff0c;appium可以测试原生的、混合的、以及移动端的web项目&#xff1b; 3&#xff0c;appium可以测试ios、android、firefox os&#xff1b; 4&#xff0c;appium是跨平台的&#xff0c;可以用在os…

【系统开发】尚硅谷 - 谷粒商城项目笔记(七):消息队列

文章目录 消息队列概述两大种类RabbitMQ安装及基操Docker中安装添加用户创建Virtual Hosts设置权限添加交换机创建队列交换机绑定队列 五种消息模型SpringBoot整合MQ引入依赖properties配置开启RabbitMQ API使用创建交换机创建队列交换机绑定队列发送消息接收消息 消息确认机制…

Notification API实战

什么是Notification&#xff1f; Notifications API 的接口 Notification 用于配置以向用户显示桌面通知。 这些通知的外观和功能因平台而异&#xff0c;但通常它们会提供一种异步向用户提供信息的方式。 前置要求 win10系统&#xff0c;且通知与操作中开启浏览器的通知权限 浏…

学习 SSL/TLS ,这一篇就够了

写在前面 如果某个网站受 SSL 证书保护&#xff0c;其相应的 URL 中会显示 HTTPS&#xff08;超文本传输安全协议&#xff09;。单击浏览器地址栏的小绿锁&#xff0c;即可查看证书中的详细信息。那么一本证书是如何诞生的&#xff1f;HTTPS 背后的 SSL/TLS 是如何在工作过程中…

❤ vue3 组件传值

❤ vue3 组件传值 [1] 子组件向父组件传值 使用emit使用方法 【子组件】 1、定义 emits,emits的定义是与component、setup等这些属性是同级 emits此时是作为数组&#xff0c;它也可以接收一个对象 2、使用 setup(props, { emit, refs }) {emit(addImg, 参数); }有时候需使…

Ubuntu20.04的cuda、cudnn、paddle安装完整过程

1、查看显卡驱动版本 显卡驱动安装看这篇&#xff1a; https://blog.csdn.net/Trisyp/article/details/131302061?spm1001.2014.3001.5501 然后输入命令nvidia-smi 查看显卡状态 2、CUDA 下载安装 直接手动在官网下载&#xff1a;CUDA Toolkit Archive | NVIDIA Developer…