关于top命令的详解
Linux top命令用于实时显示 process 的动态,当我们在命令框中敲入top命令然后回车之后,可以看到如下输出:
top - :: up days, :, users, load average: ., ., .
Tasks: total, running, sleeping, stopped, zombie
Cpu(s): 5.9%us, .%sy, .%ni, 93.7%id, .%wa, .%hi, .%si, .%st
Mem: k total, k used, k free, k buffers
Swap: k total, k used, k free, k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
mysql m 1.1g m S 39.8 4.5 : mysqld
cassandr m 4.5g m S 4.6 19.2 : java
root m m S 3.0 . :40.27 filebeat
mysql m m m S 1.3 2.8 : mysqld
mysql m m m S . 2.2 :59.41 mysqld
dba_mysq m S . . :. sshd
dba_mysq R . . :. top
mysql m 1.3g m S . 5.4 : mysqld
mysql m 1.4g m S . 5.9 : mysqld
root S . . :11.38 init
root S . . :. kthreadd
root RT S . . :56.87 migration/
root S . . :32.83 ksoftirqd/
root RT S . . :. stopper/
它显示的是进程的状态,并且每5s更新一次,类似watch命令一样,对结果会刷新。下面是它的命令参数:
PID: 进程描述符 USER: 进程的拥有者 PRI:进程的优先级 NI: nice level
VIRT:virtual memory usage 虚拟内存 1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等 2、假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量
RES:resident memory usage 常驻内存 1、进程当前使用的内存大小,但不包括swap out 2、包含其他进程的共享 3、如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反 4、关于库占用内存的情况,它只统计加载的库文件所占内存大小
SHR:shared memory 共享内存 1、除了自身进程的共享内存,也包括其他进程的共享内存 2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小 3、计算某个进程所占的物理内存大小公式:RES – SHR 4、swap out后,它将会降下来
S:进程的状态,有 S=sleeping,R=running,T=stopped or traced,D=interruptible sleep(不可中断的睡眠状态),Z=zombie。 %CPU: CPU使用率 %MEM: 物理内存的使用 TIME: 进程占用的总共cpu时间 COMMAND:进程的命令
top 运行中可以通过 top 的内部命令对进程的显示方式进行控制。内部命令如下: s – 改变画面更新频率 l – 关闭或开启第一部分第一行 top 信息的表示 t – 关闭或开启第一部分第二行 Tasks 和第三行 Cpus 信息的表示 m – 关闭或开启第一部分第四行 Mem 和 第五行 Swap 信息的表示 N – 以 PID 的大小的顺序排列表示进程列表 P – 以 CPU 占用率大小的顺序排列进程列表 M – 以内存占用率大小的顺序排列进程列表 h – 显示帮助 n – 设置在进程列表所显示进程的数量 q – 退出 top
A: 根据单窗口切换成多窗口,可以看到四个不同的窗口,可以通过a或者w来切换多个窗口。 四个窗口的名字分别为:Def,Job,Mem,Usr
f:进入一个动态配置top的screen中,可以根据自己的喜好配置top
o:对top的现有配置排序(order)
r:使用renice命令
k:使用kill命令
i:使top不显示任何闲置或者僵死进程。
c:显示整个命令行而不只是显示命令名。
(1) 批量处理模式
$ top -b
加上-b
后,top显示的时候,将每一次显示的结果都打印出来,不会将上一次的结果给冲掉。
(2) 显示某个进程的信息
$ top -p pid
如果是多个进程,只要如下:
$ top -p pid1,pid2,pid3
(3) 显示某个用户的进程信息
$ top -u username
(4) 显示线程的信息,而不是进程的信息
$ top -H
(5) 设置刷屏的时间(单位为s)
$ top -d ntime
02
free命令
1.命令格式:
free [参数]
2.命令功能:
free 命令显示系统使用和空闲的内存情况,包括物理内存、交互区内存(swap)和内核缓冲区内存。共享内存将被忽略
3.命令参数:
-b 以Byte为单位显示内存使用情况。
-k 以KB为单位显示内存使用情况。
-m 以MB为单位显示内存使用情况。
-g 以GB为单位显示内存使用情况。
-o 不显示缓冲区调节列。
-s<间隔秒数> 持续观察内存使用状况。
-t 显示内存总和列。
-V 显示版本信息
下面给出相关示例:
#简单参数介绍
[dba_mysql@tk-dba-mysql-194 ~]$ free -G
free: invalid option -- 'G'
usage: free [-b|-k|-m|-g|-h] [-l] [-o] [-t] [-s delay] [-c count] [-V]
-b,-k,-m,-g show output in bytes, KB, MB, or GB
-h human readable output (automatic unit scaling)
-l show detailed low and high memory statistics
-o use old format (no -/+buffers/cache line)
-t display total for RAM + swap
-s update every [delay] seconds
-c update [count] times
-a show available memory if exported by kernel (> characters per line)
-V display version information and exit
#以b为单位来显示空闲内存情况
[dba_mysql@tk-dba-mysql-194 ~]$ free -b
total used free shared buffers cached
Mem:
-/+ buffers/cache:
Swap:
#以kb为单位来显示空闲内存情况
[dba_mysql@tk-dba-mysql-194 ~]$ free -k
total used free shared buffers cached
Mem:
-/+ buffers/cache:
Swap:
#以Mb为单位来显示空闲内存情况
[dba_mysql@tk-dba-mysql-194 ~]$ free -m
total used free shared buffers cached
Mem:
-/+ buffers/cache:
Swap:
#以GB为单位来显示空闲内存情况
[dba_mysql@tk-dba-mysql-194 ~]$ free -g
total used free shared buffers cached
Mem:
-/+ buffers/cache:
Swap:
#每3秒显示空闲内存情况
[dba_mysql@tk-dba-mysql-194 ~]$ free -s
total used free shared buffers cached
Mem:
-/+ buffers/cache:
Swap:
total used free shared buffers cached
Mem:
-/+ buffers/cache:
Swap:
^C
#显示total行
[dba_mysql@tk-dba-mysql-194 ~]$ free -mt
total used free shared buffers cached
Mem:
-/+ buffers/cache:
Swap:
Total:
03
uniq命令
Linux uniq 命令用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用。uniq 可检查文本文件中重复出现的行列。这个命令的用法比较简单,这里只给出相关的实例,相关的注释在例子中有:
#首先我们创建一个文件,文件的内容如下:
[dba_mysql ~]$ cat yeyz.lst
test 30
test 30
test 30
Hello 95
Hello 95
Hello 95
Hello 95
Linux 85
Linux 85
#使用uniq命令进行处理,我们发现重复的记录被去除了
[dba_mysql ~]$ uniq yeyz.lst
test 30
Hello 95
Linux 85
Linux 85
#使用uniq -c参数,我们可以发现每一行记录前面统计出来了具体的重复行数
[dba_mysql ~]$ uniq -c yeyz.lst
3 test 30
4 Hello 95
1 Linux 85
1 Linux 85
[dba_mysql ~]$
#再创建一个文件yeyz.lst2文件,这个文件的不同之处是记录是乱序的。
[dba_mysql ~]$ cat yeyz.lst2
test 30
Hello 95
Linux 85
test 30
Hello 95
Linux 85
test 30
Hello 95
Linux 85
#我们使用uniq命令,发现输出的结果并没有进行去重
[dba_mysql ~]$ uniq yeyz.lst2
test 30
Hello 95
Linux 85
test 30
Hello 95
Linux 85
test 30
Hello 95
Linux 85
#想要进行去重,我们必须使用sort命令对这些记录先进行排序,然后再使用去重的方法
[dba_mysql ~]$ sort yeyz.lst2
Hello 95
Hello 95
Hello 95
Linux 85
Linux 85
Linux 85
test 30
test 30
test 30
#再次去重,我们发现还是不能出现正确的结果,原因是sort并没有改变yeyz.lst2文件本身,只是输出了排序后的结果
[dba_mysql ~]$ uniq yeyz.lst2
test 30
Hello 95
Linux 85
test 30
Hello 95
Linux 85
test 30
Hello 95
Linux 85
#我们看看刚才排序和去冲过后的文件,发现他们并没有发生变化,也就证明了前文所说的。
[dba_mysql ~]$ cat yeyz.lst
test 30
test 30
test 30
Hello 95
Hello 95
Hello 95
Hello 95
Linux 85
Linux 85
[dba_mysql ~]$ cat yeyz.lst2
test 30
Hello 95
Linux 85
test 30
Hello 95
Linux 85
test 30
Hello 95
Linux 85
#最后我们通过sort+uniq的命令,对文件中的内容进行了保存。
[dba_mysql ~]$ sort yeyz.lst2|uniq
Hello 95
Linux 85
test 30
#当然,uniq照样可以接一个-c参数
[dba_mysql ~]$ sort yeyz.lst2|uniq -c
3 Hello 95
3 Linux 85
3 test 30
#如果想要保存结果,可以把它重定向到一个文件中去
[dba_mysql@tk-dba-mysql-194 ~]$ sort yeyz.lst2|uniq -c > yeyz.lst3
[dba_mysql@tk-dba-mysql-194 ~]$ cat yeyz.lst3
3 Hello 95
3 Linux 85
3 test 30
##注意>不要写成>>,写成>>就变成了追加。
[dba_mysql@tk-dba-mysql-194 ~]$ sort yeyz.lst2|uniq -c >> yeyz.lst3
[dba_mysql@tk-dba-mysql-194 ~]$ cat yeyz.lst3
3 Hello 95
3 Linux 85
3 test 30
3 Hello 95
3 Linux 85
3 test 30