三、对内存的操作(包括free、top、ps等命令与内存爆了的排查方式)

三、对内存的操作

free命令

[root@IOServer-SSD /]# free -m
             total       used       free     shared    buffers     cached
Mem:         32148      27725       4423          0       1126      25213
-/+ buffers/cache:       1385      30763
Swap:        65535          0      65535

# 可以查看物理内存(mem)和虚拟内存(swap)的使用情况

top命令

Linux 的 top命令参数详解 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND_子冉冰清的博客-CSDN博客_%mem

img

上半部分显示了整体系统负载情况
top 第一行

​ 从左到右依次为当前系统时间,系统运行的时间,系统在之前1min、5min和15min内cpu的平均负载值

比如这张图中:

  • 15:35:44 ====> 当前系统时间是 15:35:44
  • 126 days, 14:29 ====> 系统运行时间为145天10小时45分钟(在此期间没有重启过)
  • 1 user ===> 当前有1个用户登录系统
  • load average: 2.56, 2.47, 3.26 ===> 系统在之前1min、5min、15min之内CPU的平均负载值为2.56 2.47 3.26

Tasks一行:

​ 该行给出进程整体的统计信息,包括统计周期内进程总数、运行状态进程数、休眠状态进程数、停止状态进程数和僵尸状态进程数

比如这张图中:

  • 统计周期内进程总数 ====> 98
  • 运行状态进程数 ====> 5
  • 休眠状态进程数 ====> 92
  • 停止状态进程数 ====> 0
  • 僵尸状态进程数 ====> 1

Cpu(s)一行:

​ cpu整体统计信息,包括用户态下进程、系统态下进程占用cpu时间比,nice值大于0的进程在用户态下占用cpu时间比,cpu处于idle状态、wait状态的时间比,以及处理硬中断、软中断的时间比

比如这张图中:

  • 76.9%us, 23.1%sy, 这个为用户空间和内核空间所占cpu百分比

    • 用户态下进程占用cpu时间比 ====> 76.9%
    • 内核态下进程占用cpu时间比 ====> 23.1%
  • 0.0 ni 用户进程空间内改变过优先级的进程占用CPU百分比

  • 0.0 id 空闲CPU百分比

  • 0.0 wa 等待输入输出的CPU时间百分比

  • 0.0 hi 硬中断(Hardware IRQ)占用CPU的百分比

  • 0.0 si 软中断(Software Interrupts)占用CPU的百分比


Mem一行:

​ 该行提供了内存统计信息,包括物理内存总量、已用内存、空闲内存以及用作缓冲区的内存量

比如图中 1881952 total, 72736 free, 13127996 used, 496420 buffer/cache

  • 1881952 total 物理内存总量
  • 72736 free 空间内存总量
  • 13127996 used 已用内存总量
  • 496420 buffer/cache 用作缓冲区的内存量

Swap一行

​ 虚存统计信息,包括交换空间总量、已用交换区大小、空闲交换区大小以及用作缓存的交换空间大小

Swap: 0 total, 0 free, 0 used, 405996 avail Mem

这行为交换分区使用情况,和上面内存的解释基本一致

  • 0 total, 交换分区物理内存总量
  • 0 free, 交换分区剩余空间内存总量
  • 0 used, 交换分区已用内存总量
  • 405996 avail Mem 交换分区用作缓冲区的内存量

下半部分表头

PID   USER  PR NI   VIRT  RES  SHR   S  %CPU  %MEM   TIME+ COMMAND
  • PID 进程号

  • USER 用户名

  • PR 优先级(priority )

  • NI nice值。负值表示高优先级,正值表示低优先级m

  • VIRT 进程使用的虚拟内存总量

  • RES 进程使用的、未被换出的物理内存大小,单位kb

  • SHR 共享内存大小,单位kb

  • S 进程状态。

    • D=不可中断的睡眠状态
    • R=运行
    • S=睡眠
    • T=跟踪/停止
    • Z=僵尸进程
  • %CPU CPU使用率

  • %MEM 进程使用的物理内存百分比

  • TIME+ 进程使用的CPU时间总计,单位1/100秒

  • COMMAND 执行的命令

内存爆了的排查方式

strace—— 命令跟踪,定位问题

1.首先使用 命令跟踪, 查看执行到哪一步卡死:
strace  ls /
strace  df -h

#若卡死在某个目录
2.fuser 查看问题目录进程
fuser -m /mnt
fuser -m /public

3.kill 解决
kill -9 进程ID

top等查看占用内存多的进程,查询进程号

(odc) [mca@clu08 alluxio_test]$ top
top - 22:28:17 up 5 days,  6:49,  4 users,  load average: 0.02, 0.14, 0.49
Tasks: 208 total,   1 running, 207 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.1 us,  0.1 sy,  0.0 ni, 99.3 id,  0.6 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  7997280 total,   158144 free,  7700288 used,   138848 buff/cache
KiB Swap:  6291452 total,  4692128 free,  1599324 used.    71900 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                              
31400 mca       20   0   16.6g   6.4g   7108 S   1.3 83.6 200:12.27 java                                                                                                               
 2652 mca       20   0 4066720  54440   1548 S   0.7  0.7  52:33.68 java                                                                                                               
31978 mca       20   0 9586260 148800   5964 S   0.7  1.9   6:16.87 java                                                                                                               
 2233 mca       20   0 3940384 157256   5044 S   0.3  2.0  22:00.54 java                                                                                                               
    1 root      20   0  194468   4268   2196 S   0.0  0.1   0:14.73 systemd                                                                                                             
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.18 kthreadd                                                                                                           
    4 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H                                                                                                       
    6 root      20   0       0      0      0 S   0.0  0.0   0:01.20 ksoftirqd/0             
    7 root      rt   0       0      0      0 S   0.0  0.0   0:00.48 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   5:39.64 rcu_sched                                                                                                     
   10 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 lru-add-drain                                                                                                                     
   
   
#查看进程所在的目录   
(odc) [mca@clu08 alluxio_test]$ pwdx 31400
31400: /home/mca

#根据进程号查询相关信息
(odc) [mca@clu08 31400]$ ps -ef|grep 31400
mca      25289 32399  0 22:35 pts/0    00:00:00 grep --color=auto 31400
mca      31400     1 10 Dec05 ?        03:20:25 /home/mca/env/jdk1.8/bin/java -cp /home/mca/software/alluxio/conf/::/home/mca/software/alluxio/assembly/server/target/alluxio-assembly-server-2.7.0-SNAPSHOT-jar-with-dependencies.jar -Dalluxio.logger.type=MASTER_LOGGER -Dalluxio.master.audit.logger.type=MASTER_AUDIT_LOGGER -Dalluxio.home=/home/mca/software/alluxio -Dalluxio.conf.dir=/home/mca/software/alluxio/conf -Dalluxio.logs.dir=/home/mca/software/alluxio/logs -Dalluxio.user.logs.dir=/home/mca/software/alluxio/logs/user -Dlog4j.configuration=file:/home/mca/software/alluxio/conf/log4j.properties -Dorg.apache.jasper.compiler.disablejsr199=true -Djava.net.preferIPv4Stack=true -Dorg.apache.ratis.thirdparty.io.netty.allocator.useCacheForAllThreads=false -Xmx8g -XX:MetaspaceSize=256M alluxio.master.AlluxioMaster
#
(odc) [mca@clu08 alluxio_test]$ ps -aux |grep -v grep|grep 31400
mca      31400 10.5 83.5 17447860 6685552 ?    Sl   Dec05 200:15 /home/mca/env/jdk1.8/bin/java -cp /home/mca/software/alluxio/conf/::/home/mca/software/alluxio/assembly/server/target/alluxio-assembly-server-2.7.0-SNAPSHOT-jar-with-dependencies.jar -Dalluxio.logger.type=MASTER_LOGGER -Dalluxio.master.audit.logger.type=MASTER_AUDIT_LOGGER -Dalluxio.home=/home/mca/software/alluxio -Dalluxio.conf.dir=/home/mca/software/alluxio/conf -Dalluxio.logs.dir=/home/mca/software/alluxio/logs -Dalluxio.user.logs.dir=/home/mca/software/alluxio/logs/user -Dlog4j.configuration=file:/home/mca/software/alluxio/conf/log4j.properties -Dorg.apache.jasper.compiler.disablejsr199=true -Djava.net.preferIPv4Stack=true -Dorg.apache.ratis.thirdparty.io.netty.allocator.useCacheForAllThreads=false -Xmx8g -XX:MetaspaceSize=256M alluxio.master.AlluxioMaster



#根据进程号,进入到对应的进程目录
(odc) [mca@clu08 alluxio_test]$ cd /proc/31400
(odc) [mca@clu08 31400]$ ls -ail
total 0
2976389 dr-xr-xr-x.   9 mca  mca  0 Dec  6 21:09 .
      1 dr-xr-xr-x. 218 root root 0 Dec  1 15:39 ..
3641289 dr-xr-xr-x.   2 mca  mca  0 Dec  6 22:32 attr
3641275 -rw-r--r--.   1 mca  mca  0 Dec  6 22:32 autogroup
3641271 -r--------.   1 mca  mca  0 Dec  6 22:32 auxv
3641294 -r--r--r--.   1 mca  mca  0 Dec  6 22:32 cgroup
3641286 --w-------.   1 mca  mca  0 Dec  6 22:32 clear_refs
3641414 -r--r--r--.   1 mca  mca  0 Dec  6 22:29 cmdline
3641276 -rw-r--r--.   1 mca  mca  0 Dec  6 22:32 comm
3641300 -rw-r--r--.   1 mca  mca  0 Dec  6 22:32 coredump_filter
3641293 -r--r--r--.   1 mca  mca  0 Dec  6 22:32 cpuset
3639607 lrwxrwxrwx.   1 mca  mca  0 Dec  6 22:28 cwd -> /home/mca
3641270 -r--------.   1 mca  mca  0 Dec  6 22:32 environ
3641282 lrwxrwxrwx.   1 mca  mca  0 Dec  6 22:32 exe -> /home/mca/env/jdk1.8/bin/java
3641265 dr-x------.   2 mca  mca  0 Dec  6 22:32 fd
3641267 dr-x------.   2 mca  mca  0 Dec  6 22:32 fdinfo
3641303 -rw-r--r--.   1 mca  mca  0 Dec  6 22:32 gid_map
3641301 -r--------.   1 mca  mca  0 Dec  6 22:32 io
3641273 -r--r--r--.   1 mca  mca  0 Dec  6 22:32 limits
3641298 -rw-r--r--.   1 mca  mca  0 Dec  6 22:32 loginuid
3641266 dr-x------.   2 mca  mca  0 Dec  6 22:32 map_files
3641278 -r--r--r--.   1 mca  mca  0 Dec  6 22:32 maps
3641280 -rw-------.   1 mca  mca  0 Dec  6 22:32 mem
3641284 -r--r--r--.   1 mca  mca  0 Dec  6 22:32 mountinfo
3641283 -r--r--r--.   1 mca  mca  0 Dec  6 22:32 mounts
3641285 -r--------.   1 mca  mca  0 Dec  6 22:32 mountstats
3641269 dr-xr-xr-x.   5 mca  mca  0 Dec  6 22:32 net
3641268 dr-x--x--x.   2 mca  mca  0 Dec  6 22:32 ns
3641279 -r--r--r--.   1 mca  mca  0 Dec  6 22:32 numa_maps
3641296 -rw-r--r--.   1 mca  mca  0 Dec  6 22:32 oom_adj
3641295 -r--r--r--.   1 mca  mca  0 Dec  6 22:32 oom_score
3641297 -rw-r--r--.   1 mca  mca  0 Dec  6 22:32 oom_score_adj
3641288 -r--r--r--.   1 mca  mca  0 Dec  6 22:32 pagemap
3641307 -r--------.   1 mca  mca  0 Dec  6 22:32 patch_state
3641272 -r--r--r--.   1 mca  mca  0 Dec  6 22:32 personality
3641304 -rw-r--r--.   1 mca  mca  0 Dec  6 22:32 projid_map
3641281 lrwxrwxrwx.   1 mca  mca  0 Dec  6 22:32 root -> /
3641274 -rw-r--r--.   1 mca  mca  0 Dec  6 22:32 sched
3641292 -r--r--r--.   1 mca  mca  0 Dec  6 22:32 schedstat
3641299 -r--r--r--.   1 mca  mca  0 Dec  6 22:32 sessionid
3641305 -rw-r--r--.   1 mca  mca  0 Dec  6 22:32 setgroups
3641287 -r--r--r--.   1 mca  mca  0 Dec  6 22:32 smaps
3641291 -r--r--r--.   1 mca  mca  0 Dec  6 22:32 stack
3639573 -r--r--r--.   1 mca  mca  0 Dec  6 22:25 stat
3639574 -r--r--r--.   1 mca  mca  0 Dec  6 22:25 statm
3641413 -r--r--r--.   1 mca  mca  0 Dec  6 22:29 status
3641277 -r--r--r--.   1 mca  mca  0 Dec  6 22:32 syscall
3641264 dr-xr-xr-x. 628 mca  mca  0 Dec  6 22:32 task
3641306 -r--r--r--.   1 mca  mca  0 Dec  6 22:32 timers
3641302 -rw-r--r--.   1 mca  mca  0 Dec  6 22:32 uid_map
3641290 -r--r--r--.   1 mca  mca  0 Dec  6 22:32 wchan

ps——进程

查看占用内存最多的几个进程
# sort 命令使用了 -r 选项(反转)、-n 选项(数字值)、-k 选项(关键字),使 sort 命令对 ps 命令的结果按照第四列(内存使用情况)中的数字逆序进行排列并输出。
ps aux | sort -rnk 4 | head -5


# 显示ps命令的标题
ps aux | head -1; ps aux | sort -rnk 4 | head -5


# 可以用下面的命令为他指定一个别名,如果你想一直使用它,不要忘记把该命令添加到你的 ~/.bashrc 文件中
alias mem-by-proc="ps aux | head -1; ps aux | sort -rnk 4 | head -5"

默认情况下,ps命令只会显示运行在当前控制台下的属于当前用户的进程。

ps

    -e,-A 显示所有进程
    -f 显示完整格式的输出
    -l 显示长列表
    -a,所有进程,加上-x参数会显示没有控制终端的进程
    -u username,显示指定用户的进程,例如ps -u ltc
    -aux 按照CPU或者内存用量来筛选进程,例如ps -aux --sort -pcpu或ps -aux --sort -pmem
    -C cmdlist,显示包含在cmdlist列表中的进程,例如ps -C test
    -L 显示进程中的线程,例如ps -L 123,123为进程ID
    -j 显示任务信息
    -H 用层级显示进程,树状结构
实例

ps常常与管道命令结合

# 按照内存量筛选
(base) [mca@clu01 ~]$ ps -aux --sort -pmem
# 前五个
(base) [mca@clu01 ~]$ ps -aux --sort -pmem |head -5
# 查看检索含指定命令内容的进程
(base) [mca@clu01 ~]$ ps -aux |grep mongo*
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值