三、对内存的操作
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
上半部分显示了整体系统负载情况
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*