Linux 内存监控

简介: Linux 内存监控

centos6 init进程是系统中的第一个进程,PID永远为1


查看系统在中静态进程的统计信息#


命令: ps

格式: ps [可选项]

  • ax: 显示所有的进程信息
  • -u: 使用以用户为主的格式输出进程信息
  • -e: select all processes 显示系统内的进程信息
  • -l: 使用长格式显示进程信息
  • -f: full 使用完整的格式显示进程信息

补充: ps -eo pid,args,psr 可以查看系统上进程的 pid 命令参数 已经占用的哪个cpu


ps aux命令#


[root@ecs-t6-large-2-linux-20190824103606 tmp]# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1 125568  3984 ?        Ss   Sep04   0:05 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root         2  0.0  0.0      0     0 ?        S    Sep04   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    Sep04   0:00 [ksoftirqd/0]
解析
USER: 进程所属的用户
PID: 进程id
%CPU: 进程占用CPU的百分比
%MEM: 进程占用内存的百分比
VSZ:  进程使用的虚拟内存量
RSS:  进程占用的物理内存容量
TTY: 进程在哪个终端上运行
STAT: 进程状态
START: 进程启动时间
TIME: 进程实际占用cpu的时间
COMMAND: 命令名称和参数


ps -elf命令#


[root@ecs-t6-large-2-linux-20190824103606 tmp]# ps -elf
F S UID        PID  PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
4 S root         1     0  0  80   0 - 31392 ep_pol Sep04 ?        00:00:05 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
1 S root         2     0  0  80   0 -     0 kthrea Sep04 ?        00:00:00 [kthreadd]
1 S root         3     2  0  80   0 -     0 smpboo Sep04 ?        00:00:00 [ksoftirqd/0]
1 S root         5     2  0  60 -20 -     0 worker Sep04 ?        00:00:00 [kworker/0:0H]
F : 进程的flag, 4代表使用者, super user
S : 进程的用户
PPID : 父进程
C: cpu的利用率
PRI : Priority  优先级
NI : Nice
PRI/NI : 进程被CPU执行的优先级, 值越小, 越容易被执行
ADDR: 进程内存的地址
SZ: 占用的内存大小
WCHAN: 是否正在运作
CMD: 命令名称和参数


查看动态的进程排名信息#


top命令

  • P:按%CPU排序
  • M:按%MEM排序
  • 1: 多核的话, 按1,可以显示出全部CPU

空格:马上刷新

默认每三秒就刷新一次

每隔一秒刷新一次


top -d 1


top 字段解析


top - 20:31:56 up 10 days,  5:03,  1 user,  load average: 0.00, 0.01, 0.05
 当前时间      系统运行的时间    在线人数       系统负载 : 任务队列的平均长度     
# 使用w 或 uptime 可以查看到同样的信息
Tasks:  81 total,   1 running,  80 sleeping,   0 stopped,   0 zombie
%Cpu(s):  3.2 us,  0.0 sy,  0.0 ni, 96.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
total 进程总数81   正在运行1个进程  80个在休眠  0个停止了  0个僵尸进程数
3.2 us : 用户空间占用cpu百分比3.2
0.0 sy : 内核空间占用cpu的百分百
0.0 ni : 用户空间内改变过优先级的进程占用cpu的百分比
96.8 id: 空闲的cpu百分比
0.0 wa: 等待输入输出的进程占用cpu 的百分比
0.0 hi: 硬件cpu占用百分比
0.0 si: 软中断占用cpu百分比
0.0 st: 虚拟机占有cpu百分比
KiB Mem :  3880020 total,   601516 free,  1553552 used,  1724952 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  2045092 avail Mem 
Mem 内存 总共3880020k 物理内存容量  空闲内存容量=601516  已经使用:used=1553552 缓存=1724952
Swap: 交换区总量0 
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND        
    1 root      20   0  125568   3984   2628 S   0.0  0.1   0:05.14 systemd     
PID: 进程id
USER: 优先级
PR: 优先级
NI: 负数表示高优先级, 正数表示低优先级
VIRT: 进程使用的虚拟内存数
RES: 进程使用的未被换出的物理内存大小
SHR: 共享内存量
S: 进程状态
%CPU: 使用的CPU百分比
@MEN: 使用的物理内存百分比
TIME+ : 使用的CPU时间总计
COMMAND :  命令名


加入nice值后, PRI(新) = PRI(老) + nice

  • root ,可以设置的范围是 [-20 19]
  • 普通用户 ,可以设置的范围是 [0 19]


以树型结构显示各进程间的关系#


命令: pstree


[root@ecs-t6-large-2-linux-20190824103606 tmp]# pstree
systemd─┬─NetworkManager─┬─dhclient
        │                └─2*[{NetworkManager}]
        ├─agetty
        ├─atd
        ├─auditd───{auditd}
        ├─crond
        ├─dbus-daemon
        ├─dockerd-current─┬─docker-containe───10*[{docker-containe}]
        │                 └─10*[{dockerd-current}]
        ├─irqbalance
        ├─java───49*[{java}]
        ├─lvmetad
        ├─master─┬─pickup
        │        └─qmgr
        ├─ntpd
        ├─polkitd───6*[{polkitd}]
        ├─python
        ├─rsyslogd───2*[{rsyslogd}]
        ├─sshd───sshd───bash───pstree
        ├─systemd-journal
        ├─systemd-logind
        ├─systemd-udevd
        ├─tuned───4*[{tuned}]
        └─wrapper─┬─java───14*[{java}]
                  └─{wrapper}


进程优先级设置#


  • niceness:表示进程可被执行的优先级的修正数值 ,可手工修改,与priority有关

优先级有正负之分(-20 ~ 19)

加入nice值后 PRI(新) = PRI(老) + nice

root可以设置nice值范围(-20 ~ 19)

普通用户可以设置nice值范围(0 ~ 19)

  • 用nice命令新的nice(新开启的进程)

以新的nice来启动命令


nice -10 vi &  设置nice值为10
nice --10 vi & 设置nice值为-10


  • 用renice命令设置新nice(已经存在的进程)


renice 10 15132   设置nice值为10
renice -10 15132  设置nice值为-10
renice命令。renice -n 2 -p 3432。-n,后面是优先级的值;-p,是进程号。


  • 用top命令修改进程的优先级


先输入r,然后输入pid,最后输入优先级


后台运行#


需要在命令行后添加&符号


如何让 jar包后台运行?#


nohup java -jar xxx.jar &


退出 exit


信号 kill#


kill命令用来发送信号, 是进程间通信机制中唯一的异步通信机制

进程接收到信号后,采取其他动作,常用它杀死进程


信号值 符号 行为
2 sigint (interrupt) ctrl + c
9 sigkill (强制杀死进程) 请求终止,不能忽略
15 sigterm ( terminate终止) 请求终止 默认值
20 sigtstp (stop, 挂起进程,放到后台执行) ctrl + z


强制杀死进程


kill -9 pid


有时候直接 kill pid 却杀不掉这个进程, 说明他屏蔽了默认值


杀死终端#


实现强制下线用户

pkill [选项]

  • -u: 根据进程所属的用户名,杀死进程
  • -t: 根据用户所在的终端 TTY杀死进程


[root@localhost ~]# w | grep -v "root"
14:10:10 up  6:08,  4 users,  load average: 0.00, 0.01, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
teacher  tty1     -                14:04    5:34   0.16s  0.16s -bash
hack      pts/1    173.17.17.174    14:05    4:32   0.17s  0.17s -bash
[root@localhost ~]# pkill -9 -t pts/1
[root@localhost ~]# w | grep -v "root"
 14:12:22 up  6:10,  3 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
teacher  tty1     -                14:04    7:46   0.16s  0.16s -bash


显示物理内存和交换空间的使用情况#


命令: free

-m: 用MB的形式显示内存信息

-h: human readable


[root@ecs-t6-large-2-linux-20190824103606 ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           3.7G        1.4G        636M        8.6M        1.6G        2.0G
Swap:            0B          0B          0B


从用户的角度来说,可用的空间就是 free + buff/cache

buff/cache 会随着系统负载的增大而减小, 释放掉缓存的空间,更多的IO直接针对磁盘操作,系统会变慢


内存监控#


  • 系统内存信息在这个文件记录 /proc/meminfo

点击查看对这个文件所有字段的解释


释放内存#


/proc是一个特殊文件系统,我们可以通过对它的读写操作,来作为与kernel实体间进行通信的一种手段.也就是说可以通过修改/proc中的文件,来对当前kernel的行为做出调整.那么我们可以通过调整/proc/sys/vm/drop_caches来释放内存

往 /proc/sys/vm/drop_caches 分别写入1, 2, 3


页面缓存(page cache)可以包含磁盘块的任何内存映射
echo 1 > /proc/sys/vm/drop_caches;
inode是表示文件的数据结构
echo 2 > /proc/sys/vm/drop_caches;
dentries是表示目录的数据结构 。
echo  3  > /proc/sys/vm/drop_caches.
相关实践学习
通义万相文本绘图与人像美化
本解决方案展示了如何利用自研的通义万相AIGC技术在Web服务中实现先进的图像生成。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
相关文章
|
25天前
|
缓存 监控 Linux
Linux内存问题排查命令详解
Linux服务器卡顿?可能是内存问题。掌握free、vmstat、sar三大命令,快速排查内存使用情况。free查看实时内存,vmstat诊断系统整体性能瓶颈,sar实现长期监控,三者结合,高效定位并解决内存问题。
77 0
Linux内存问题排查命令详解
|
9月前
|
缓存 Linux
linux 手动释放内存
在 Linux 系统中,内存管理通常自动处理,但业务繁忙时缓存占用过多可能导致内存不足,影响性能。此时可在业务闲时手动释放内存。
454 17
|
5月前
|
缓存 Linux 数据安全/隐私保护
Linux环境下如何通过手动调用drop_caches命令释放内存
总的来说,记录住“drop_caches” 命令并理解其含义,可以让你在日常使用Linux的过程中更加娴熟和自如。
1080 23
|
11月前
|
监控 Linux
如何检查 Linux 内存使用量是否耗尽?这 5 个命令堪称绝了!
本文介绍了在Linux系统中检查内存使用情况的5个常用命令:`free`、`top`、`vmstat`、`pidstat` 和 `/proc/meminfo` 文件,帮助用户准确监控内存状态,确保系统稳定运行。
2155 6
|
5月前
|
运维 监控 中间件
Linux运维笔记 - 如何使用WGCLOUD监控交换机的流量
WGCLOUD是一款开源免费的通用主机监控工具,安装使用都非常简单,它可以监控主机、服务器的cpu、内存、磁盘、流量等数据,也可以监控数据库、中间件、网络设备
|
7月前
|
监控 Linux Python
Linux系统资源管理:多角度查看内存使用情况。
要知道,透过内存管理的窗口,我们可以洞察到Linux系统运行的真实身姿,如同解剖学家透过微观镜,洞察生命的奥秘。记住,不要惧怕那些高深的命令和参数,他们只是你掌握系统"魔法棒"的钥匙,熟练掌握后,你就可以骄傲地说:Linux,我来了!
251 27
|
8月前
|
消息中间件 Linux
Linux中的System V通信标准--共享内存、消息队列以及信号量
希望本文能帮助您更好地理解和应用System V IPC机制,构建高效的Linux应用程序。
314 48
|
8月前
|
缓存 NoSQL Linux
Linux系统内存使用优化技巧
交换空间(Swap)的优化 禁用 Swap sudo swapoff -a 作用:这个命令会禁用系统中所有的 Swap 空间。swapoff 命令用于关闭 Swap 空间,-a 参数表示关闭 /etc/fstab 文件中配置的所有 Swap 空间。 使用场景:在高性能应用场景下,比如数据库服务器或高性能计算服务器,禁用 Swap 可以减少磁盘 I/O,提高系统性能。
309 3
|
8月前
|
缓存 Linux
Linux查看内存命令
1. free free命令是最常用的查看内存使用情况的命令。它显示系统的总内存、已使用内存、空闲内存和交换内存的总量。 free -h • -h 选项:以易读的格式(如GB、MB)显示内存大小。 输出示例: total used free shared buff/cache available Mem: 15Gi 4.7Gi 4.1Gi 288Mi 6.6Gi 9.9Gi Swap: 2.0Gi 0B 2.0Gi • to
624 2
|
11月前
|
缓存 Java Linux
如何解决 Linux 系统中内存使用量耗尽的问题?
如何解决 Linux 系统中内存使用量耗尽的问题?
931 59