linux-tutorial/docs/linux/commands/系统管理/系统性能管理.md

18 KiB
Raw Blame History

title date categories tags
linux 常用命令-系统性能管理 2018/02/27
linux
linux
command

linux 常用命令-系统性能管理

df

显示磁盘的相关信息

补充说明

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

语法

df(选项)(参数)

选项

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

参数

文件:指定文件系统上的文件。

实例

查看系统磁盘设备默认是KB为单位

[root@LinServ-1 ~]# df
文件系统               1K-块        已用     可用 已用% 挂载点
/dev/sda2            146294492  28244432 110498708  21% /
/dev/sda1              1019208     62360    904240   7% /boot
tmpfs                  1032204         0   1032204   0% /dev/shm
/dev/sdb1            2884284108 218826068 2518944764   8% /data1

使用-h选项以KB以上的单位来显示可读性高

[root@LinServ-1 ~]# df -h
文件系统              容量  已用 可用 已用% 挂载点
/dev/sda2             140G   27G  106G  21% /
/dev/sda1             996M   61M  884M   7% /boot
tmpfs                1009M     0 1009M   0% /dev/shm
/dev/sdb1             2.7T  209G  2.4T   8% /data1

查看全部文件系统:

[root@LinServ-1 ~]# df -a
文件系统               1K-块        已用     可用 已用% 挂载点
/dev/sda2            146294492  28244432 110498708  21% /
proc                         0         0         0   -  /proc
sysfs                        0         0         0   -  /sys
devpts                       0         0         0   -  /dev/pts
/dev/sda1              1019208     62360    904240   7% /boot
tmpfs                  1032204         0   1032204   0% /dev/shm
/dev/sdb1            2884284108 218826068 2518944764   8% /data1
none                         0         0         0   -  /proc/sys/fs/binfmt_misc

du

显示每个文件和目录的磁盘使用空间

补充说明

du命令 也是查看使用空间的但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看还是和df命令有一些区别的。

语法

du [选项][文件]

选项

-a或-all 显示目录中个别文件的大小。
-b或-bytes 显示目录或文件大小时以byte为单位。
-c或--total 除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。
-k或--kilobytes 以KB(1024bytes)为单位输出。
-m或--megabytes 以MB为单位输出。
-s或--summarize 仅显示总计,只列出最后加总的值。
-h或--human-readable 以KMG为单位提高信息的可读性。
-x或--one-file-xystem 以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。
-L<符号链接>或--dereference<符号链接> 显示选项中所指定符号链接的源文件大小。
-S或--separate-dirs 显示个别目录的大小时,并不含其子目录的大小。
-X<文件>或--exclude-from=<文件> 在<文件>指定目录或文件。
--exclude=<目录或文件> 略过指定的目录或文件。
-D或--dereference-args 显示指定符号链接的源文件大小。
-H或--si 与-h参数相同但是KMG是以1000为换算单位。
-l或--count-links 重复计算硬件链接的文件。

实例

显示目录或者文件所占空间:

root@localhost [test]# du
608 ./test6
308 ./test4
4 ./scf/lib
4 ./scf/service/deploy/product
4 ./scf/service/deploy/info
12 ./scf/service/deploy
16 ./scf/service
4 ./scf/doc
4 ./scf/bin
32 ./scf
8 ./test3
1288 .

只显示当前目录下面的子目录的目录大小和当前目录的总的大小最下面的1288为当前目录的总大小

显示指定文件所占空间:

[root@localhost test]# du log2012.log
300 log2012.log

查看指定目录的所占空间:

[root@localhost test]# du scf
4 scf/lib
4 scf/service/deploy/product
4 scf/service/deploy/info
12 scf/service/deploy
16 scf/service
4 scf/doc
4 scf/bin
32 scf

显示多个文件所占空间:

[root@localhost test]# du log30.tar.gz log31.tar.gz
4 log30.tar.gz
4 log31.tar.gz

只显示总和的大小:

[root@localhost test]# du -s
1288 .

[root@localhost test]# du -s scf
32 scf

[root@localhost test]# cd ..
[root@localhost soft]# du -s test
1288 test

top

显示或管理执行中的程序

补充说明

top命令 可以实时动态地查看系统的整体运行情况是一个综合了多方信息监测系统性能和运行信息的实用工具。通过top命令所提供的互动式界面用热键可以管理。

语法

top(选项)

选项

-b以批处理模式操作
-c显示完整的治命令
-d屏幕刷新间隔时间
-I忽略失效过程
-s保密模式
-S累积模式
-i<时间>:设置间隔时间;
-u<用户名>:指定用户名;
-p<进程号>:指定进程;
-n<次数>:循环显示的次数。

top交互命令

在top命令执行过程中可以使用的一些交互命令。这些命令都是单字母的如果在命令行中使用了-s选项 其中一些命令可能会被屏蔽。

h显示帮助画面给出一些简短的命令总结说明
k终止一个进程
i忽略闲置和僵死进程这是一个开关式命令
q退出程序
r重新安排一个进程的优先级别
S切换到累计模式
s改变两次刷新之间的延迟时间单位为s如果有小数就换算成ms。输入0值则系统将不断刷新默认值是5s
f或者F从当前显示中添加或者删除项目
o或者O改变显示项目的顺序
l切换显示平均负载和启动时间信息
m切换显示内存信息
t切换显示进程和CPU状态信息
c切换显示命令名称和完整命令行
M根据驻留内存大小进行排序
P根据CPU使用百分比大小进行排序
T根据时间/累计时间进行排序;
w将当前设置写入~/.toprc文件中。

实例

top - 09:44:56 up 16 days, 21:23,  1 user,  load average: 9.59, 4.75, 1.92
Tasks: 145 total,   2 running, 143 sleeping,   0 stopped,   0 zombie
Cpu(s): 99.8%us,  0.1%sy,  0.0%ni,  0.2%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   4147888k total,  2493092k used,  1654796k free,   158188k buffers
Swap:  5144568k total,       56k used,  5144512k free,  2013180k cached

解释:

  • top - 09:44:56[当前系统时间],
  • 16 days[系统已经运行了16天],
  • 1 user[个用户当前登录],
  • load average: 9.59, 4.75, 1.92[系统负载,即任务队列的平均长度]
  • Tasks: 145 total[总进程数],
  • 2 running[正在运行的进程数],
  • 143 sleeping[睡眠的进程数],
  • 0 stopped[停止的进程数],
  • 0 zombie[冻结进程数],
  • Cpu(s): 99.8%us[用户空间占用CPU百分比],
  • 0.1%sy[内核空间占用CPU百分比],
  • 0.0%ni[用户进程空间内改变过优先级的进程占用CPU百分比],
  • 0.2%id[空闲CPU百分比], 0.0%wa[等待输入输出的CPU时间百分比],
  • 0.0%hi[],
  • 0.0%st[],
  • Mem: 4147888k total[物理内存总量],
  • 2493092k used[使用的物理内存总量],
  • 1654796k free[空闲内存总量],
  • 158188k buffers[用作内核缓存的内存量]
  • Swap:  5144568k total[交换区总量],
  • 56k used[使用的交换区总量],
  • 5144512k free[空闲交换区总量],
  • 2013180k cached[缓冲的交换区总量],

free

显示内存的使用情况

补充说明

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

语法

free(选项)

选项

-b # 以Byte为单位显示内存使用情况
-k # 以KB为单位显示内存使用情况
-m # 以MB为单位显示内存使用情况
-g # 以GB为单位显示内存使用情况。 
-o # 不显示缓冲区调节列;
-s<间隔秒数> # 持续观察内存使用状况;
-t # 显示内存总和列;
-V # 显示版本信息。

实例

free -t    # 以总和的形式显示内存的使用信息
free -s 10 # 周期性的查询内存使用信息每10s 执行一次命令

显示内存使用情况

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反映的是可以挪用的内存总数。

第三部分是指交换分区。

输出结果的第四行是交换分区SWAP的也就是我们通常所说的虚拟内存。 区别:第二行(mem)的used/free与第三行(-/+ buffers/cache) used/free的区别。 这两个的区别在于使用的角度来看第一行是从OS的角度来看因为对于OSbuffers/cached 都是属于被使用所以他的可用内存是2098428KB,已用内存是30841684KB,其中包括内核OS使用+Application(X, oracle,etc)使用的+buffers+cached.

第三行所指的是从应用程序角度来看对于应用程序来说buffers/cached 是等于可用的因为buffer/cached是为了提高文件读取的性能当应用程序需在用到内存的时候buffer/cached会很快地被回收。

所以从应用程序的角度来说,可用内存=系统free memory+buffers+cached。 如本机情况的可用内存为:

18007156=2098428KB+4545340KB+11363424KB

接下来解释什么时候内存会被交换,以及按什么方交换。

当可用内存少于额定值的时候,就会开会进行交换。如何看额定值:

cat /proc/meminfo

MemTotal:       16140816 kB
MemFree:          816004 kB
MemAvailable:    2913824 kB
Buffers:           17912 kB
Cached:          2239076 kB
SwapCached:            0 kB
Active:         12774804 kB
Inactive:        1594328 kB
Active(anon):   12085544 kB
Inactive(anon):    94572 kB
Active(file):     689260 kB
Inactive(file):  1499756 kB
Unevictable:      116888 kB
Mlocked:          116888 kB
SwapTotal:       8191996 kB
SwapFree:        8191996 kB
Dirty:                56 kB
Writeback:             0 kB
AnonPages:      12229228 kB
Mapped:           117136 kB
Shmem:             58736 kB
Slab:             395568 kB
SReclaimable:     246700 kB
SUnreclaim:       148868 kB
KernelStack:       30496 kB
PageTables:       165104 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:    16262404 kB
Committed_AS:   27698600 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      311072 kB
VmallocChunk:   34350899200 kB
HardwareCorrupted:     0 kB
AnonHugePages:   3104768 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      225536 kB
DirectMap2M:    13279232 kB
DirectMap1G:     5242880 kB

交换将通过三个途径来减少系统中使用的物理页面的个数: 

  1. 减少缓冲与页面cache的大小
  2. 将系统V类型的内存页面交换出去 
  3. 换出或者丢弃页面。(Application 占用的内存页,也就是物理内存不足)。

事实上少量地使用swap是不是影响到系统性能的。

那buffers和cached都是缓存两者有什么区别呢

为了提高磁盘存取效率, Linux做了一些精心的设计, 除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换), 还采取了两种主要Cache方式

Buffer Cache和Page Cache。前者针对磁盘块的读写后者针对文件inode的读写。这些Cache有效缩短了 I/O系统调用(比如read,write,getdents)的时间。 磁盘的操作有逻辑级文件系统和物理级磁盘块这两种Cache就是分别缓存逻辑和物理级数据的。

Page cache实际上是针对文件系统的是文件的缓存在文件层面上的数据会缓存到page cache。文件的逻辑层需要映射到实际的物理磁盘这种映射关系由文件系统来完成。当page cache的数据需要刷新时page cache中的数据交给buffer cache因为Buffer Cache就是缓存磁盘块的。但是这种处理在2.6版本的内核之后就变的很简单了没有真正意义上的cache操作。

Buffer cache是针对磁盘块的缓存也就是在没有文件系统的情况下直接对磁盘进行操作的数据会缓存到buffer cache中例如文件系统的元数据都会缓存到buffer cache中。

简单说来page cache用来缓存文件数据buffer cache用来缓存磁盘数据。在有文件系统的情况下对文件操作那么数据会缓存到page cache如果直接采用dd等工具对磁盘进行读写那么数据会缓存到buffer cache。

所以我们看linux,只要不用swap的交换空间,就不用担心自己的内存太少.如果常常swap用很多,可能你就要考虑加物理内存了.这也是linux看内存是否够用的标准.

如果是应用服务器的话,一般只看第二行,+buffers/cache,即对应用程序来说free的内存太少了也是该考虑优化程序或加内存了。

iotop

用来监视磁盘I/O使用状况的工具

补充说明

iotop命令 是一个用来监视磁盘I/O使用状况的top类工具。iotop具有与top相似的UI其中包括PID、用户、I/O、进程等相关信息。Linux下的IO统计工具如iostatnmon等大多数是只能统计到per设备的读写情况如果你想知道每个进程是如何使用IO的就比较麻烦使用iotop命令可以很方便的查看。

iotop使用Python语言编写而成要求Python2.5及以上版本和Linux kernel2.6.20及以上版本。iotop提供有源代码及rpm包可从其官方主页下载。

安装

Ubuntu

apt-get install iotop

CentOS

yum install iotop

编译安装

wget http://guichaz.free.fr/iotop/files/iotop-0.4.4.tar.gz    
tar zxf iotop-0.4.4.tar.gz    
python setup.py build    
python setup.py install    

语法

iotop选项

选项

-o只显示有io操作的进程
-b批量显示无交互主要用作记录到文件。
-n NUM显示NUM次主要用于非交互式模式。
-d SEC间隔SEC秒显示一次。
-p PID监控的进程pid。
-u USER监控的进程用户。

iotop常用快捷键

  1. 左右箭头改变排序方式默认是按IO排序。
  2. r改变排序顺序。
  3. o只显示有IO输出的进程。
  4. p进程/线程的显示方式的切换。
  5. a显示累积使用量。
  6. q退出。

实例

直接执行iotop就可以看到效果了

Total DISK read:       0.00 B/s | Total DISK write:       0.00 B/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    command
    1 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % init [3]
    2 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kthreadd]
    3 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/0]
    4 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/0]
    5 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [watchdog/0]
    6 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/1]
    7 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/1]
    8 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [watchdog/1]
    9 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [events/0]
   10 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [events/1]
   11 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [khelper]
2572 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [bluetooth]