本文整理一下Linux常用的性能管理命令,仅保留了个人工作中会用到的内容。内容均来源于网络,详见参考文献。

df 命令

df命令用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。

参数:

  • -a 全部文件系统列表
  • -h 方便阅读方式显示
  • -k或–kilobytes:指定区块大小为1024字节;
  • -m或–megabytes:指定区块大小为1048576字节;
  • –block-size=<区块大小>:以指定的区块大小来显示区块数目;
  • -H或–si:与-h参数相同,但在计算时是以1000 Bytes为换算单位而非1024 Bytes;
  • -i 显示inode信息
  • –sync:在取得磁盘使用信息前,先执行sync指令;
  • –no-sync:在取得磁盘使用信息前,不要执行sync指令,此为预设值;
  • -P或–portability:使用POSIX的输出格式;
  • -T或–print-type:显示文件系统的类型;
  • –help:显示帮助;
  • –version:显示版本信息。

如果你使用df命令的话,你应该会看到文件系统 tmpfs,它是类Unix系统上暂存档存储空间的常见名称,通常以挂载文件系统方式实现,并将数据存储在易失性存储器而非永久存储设备中。和RAM disk的概念近似,但后者会呈现出具有完整文件系统的虚拟磁盘[4]。

所有在tmpfs上存储的数据在理论上都是暂时借放的,那也表示说,文件不会创建在硬盘上面。一旦重启,所有在tmpfs里面的数据都会消失不见。理论上,存储器使用量会随着tmpfs的使用而时有增长或消减。目前有许多Unix的发行版都有激活tmpfs,默认是把它以共享存储器的方式用在系统的/tmp目录底下。这个特征在 Unix 上面会表现像是[4]:

1
2
Filesystem     Size  Used Avail Use% Mounted on
tmpfs 256M 688K 256M 1% /tmp

du 命令

du命令用来查看文件和目录的大小。

参数

  • -a或-all 显示目录中个别文件的大小。
  • -b或-bytes 显示目录或文件大小时,以byte为单位。
  • -c或–total 除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。
  • -k或–kilobytes 以KB(1024bytes)为单位输出。
  • -m或–megabytes 以MB为单位输出。
  • -s或–summarize 仅显示总计,只列出最后加总的值。
  • -h或–human-readable 以K,M,G为单位,提高信息的可读性。
  • -L<符号链接>或–dereference<符号链接> 显示选项中所指定符号链接的源文件大小。
  • -S或–separate-dirs 显示个别目录的大小时,并不含其子目录的大小。
  • -H或–si 与-h参数相同,但是K,M,G是以1000为换算单位。[10]

sync 命令

sync命令用于强制被改变的内容立刻写入磁盘,更新超块信息。

在Linux/Unix系统中,在文件或数据处理过程中一般先放到内存缓冲区中,等到适当的时候再写入磁盘,以提高系统的运行效率。sync命令则可用来强制将内存缓冲区中的数据立即写入磁盘中。用户通常不需执行sync命令,系统会自动执行update或bdflush操作,将缓冲区的数据写 入磁盘。只有在update或bdflush无法执行或用户需要非正常关机时,才需手动执行sync命令[2]。

top 命令

top命令用来显示Linux进程的资源实时占用情况,可以用该命令查看Linux的内存使用情况,但是查出来的内存一般比较高,这和Linux的内存分配机制有关。

在Linux中,有两个缓存内存 buffers和cached,在Linux系统下的buffer指的是磁盘写缓存,而cache则指的是磁盘读缓存。

而这两块是为了提高系统效率而分配的内存,在内存富余的时候,操作系统将空闲内存利用起来,而有内存需求时,系统会释放这部分的内存供应用程序使用[6]。

这样,真正应用程序可用的内存就是free+buffer+cache,上面的例子就是:
52068k + 112620k + 1831700k = 1996388k

而已用内存则是used-buffer-cache,上面的例子为:
4034428k - 112620k - 1831700k = 2090108k

还可以使用free -m 查看某一时刻的内存使用情况。

free 命令

free命令可以显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区[9]。

参数

  • -b:以Byte为单位显示内存使用情况;

  • -k:以KB为单位显示内存使用情况;

  • -m:以MB为单位显示内存使用情况;

  • -o:不显示缓冲区调节列;

  • -s<间隔秒数>:持续观察内存使用状况;

  • -t:显示内存总和列;

  • -V:显示版本信息。

  • 按进程的CPU使用率排序。运行top命令后,键入大写P。

  • 按进程的内存使用率排序。运行top命令后,键入大写M。

实例:

1
2
3
4
5
free -m
total used free shared buffers cached
Mem: 2016 1973 42 0 163 1497
-/+ buffers/cache: 312 1703
Swap: 4094 0 4094

第一部分Mem行解释:

  • total:内存总数;
  • used:已经使用的内存数;
  • free:空闲的内存数;
  • shared:当前已经废弃不用;
  • buffers Buffer:缓存内存数;
  • cached Page:缓存内存数。
  • 关系:total = used + free

第二部分(-/+ buffers/cache)解释:

  • (-buffers/cache) used内存数:第一部分Mem行中的 used – buffers – cached
  • (+buffers/cache) free内存数: 第一部分Mem行中的 free + buffers + cached

可见-buffers/cache反映的是被程序实实在在吃掉的内存,而+buffers/cache反映的是可以挪用的内存总数。

第三部分是指交换分区[9]。

linux下查看最消耗CPU、内存的进程

1 CPU占用最多的前10个进程:

1
ps auxw|head -1;ps auxw|sort -rn -k3|head -10

2 内存消耗最多的前10个进程

1
ps auxw|head -1;ps auxw|sort -rn -k4|head -10

3 虚拟内存使用最多的前10个进程 [5]

1
ps auxw|head -1;ps auxw|sort -rn -k5|head -10p

jps

jps是jdk提供的一个查看当前java进程的小工具,全称是 Java Virtual Machine Process Status Tool。

  • q:仅输出VM标识符,不输出类名,JAR文件名,main方法的参数
  • m:输出main方法的参数
  • l:输出主类的完整包名,或者jar文件的完整路径
  • v:输出jvm参数
  • V:输出通过flags文件传递给JVM的参数

使用示例:

1
jps -m | grep "para_name" | wc -l

linux下查找文件和目录

在指定目录下递归查找包含“abc”的文件:

1
grep -Ri ~/bin -e "abc"

grep命令参数:

  • R - 表示递归搜索指定的目录
  • i - 表示忽略大小写区别
  • e - 指定要用作搜索模式的短语
  • d - 指定分隔符
  • f - 设置要打印的字段

查找目录:

1
find /(查找目录) -name '查找关键字' -type d

查找文件:

1
find /(查找目录) -name '查找关键字' -print

参考

  1. http://man.linuxde.net/df
  2. http://man.linuxde.net/sync
  3. 每天一个linux命令(33):df 命令
  4. https://zh.wikipedia.org/wiki/Tmpfs
  5. linux下查看最消耗CPU、内存的进程
  6. Linux查看物理内存占用率
  7. linux下使用free命令查看实际内存占用(可用内存)
  8. 记一次Linux系统内存占用较高得排查
  9. http://man.linuxde.net/free
  10. 每天一个linux命令(34):du 命令
  11. 5个命令行工具,可在Linux中快速查找文件
  12. linux 查找目录或文件