Linux性能管理命令
本文整理一下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 | Filesystem Size Used Avail Use% Mounted on |
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 | free -m |
第一部分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 |