影响性能的因素
1.CPU(cpu的速度与性能很大一部分决定了系统整体的性能,是否使用SMP)
2.内存(物理内存不够时会使用交换内存,使用swap会带来磁盘I0和cpu的开销)
3.硬盘(存储系统)
所以本篇文章为linux性能分析的起步,分为1.查看cpu详细情况,2.查看内存使用情况,3.查看硬盘使用情况
1.查看cpu详细情况
1.1显示物理cpu个数的命令:
cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l
4
1.2显示每个物理cpu中的core的个数(即核数)
cat /proc/cpuinfo | grep "cpu cores" | uniq
cpu cores : 1
1.3显示逻辑cpu的个数
cat /proc/cpuinfo | grep "processor" | wc -l
4
总结 物理cpu个数 * 核数 = 逻辑cpu个数
如果不等,表示cpu支持超线程技术,配置服务器应以服务器的逻辑cpu个数为标准
2.查看内存使用情况
1.1 查看内容使用情况
free -m
total used free shared buffers cached
Mem: 3829 3582 246 0 287 2275
-/+ buffers/cache: 1020 2809
Swap: 0 0 0
total 内存总数
used 已使用的内存
free 空闲的内容
shared 多个进程共享的内存总额
buffers buffer cache和cached page cache 磁盘缓存的大小
(*)那个 -/+ buffers/cache可分为已用内存数和可用内存数:
已用内存数 = used - buffers - cached 3582MB - 287MB - 2275MB = 1020MB
可用内存数 = free + buffers + cached 246MB+ 287MB + 2275MB = 2809MB
(*)Linux服务器上看内存是否够用的标准: 查看swap(交换空间)用了多少,如果多的话,可考虑添加物理内存
3.查看硬盘使用情况:
1.1查看磁盘及分区信息
fdisk -l
Disk /dev/xvdb: 161.1 GB, 161061273600 bytes
255 heads, 63 sectors/track, 19581 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x674d8b19
Device Boot Start End Blocks Id System
/dev/xvdb1 1 19581 157284351 83 Linux
/dev/xvda 此设备的大小为161.1 GB,
255 heads 255磁头数
63 sectors/track 63个扇区
19581 cylinders 19581个柱面
Sector size (logical/physical): 512 bytes / 512 bytes 表示
一个扇区的大小是512字节
I/O size (minimum/optimal): 512 bytes / 512 bytes 表示一个I/O的大小是512字节
Disk identifier 磁盘标识符
其实可从上面得到的信息是 /dev/xvdb1磁盘大小为161.1GB
1.2检查文件系统的磁盘空间占用情况
df -h
Filesystem Size(总大小) Used(已用) Avail(可用) Use%(已用%) Mounted on(挂载点)
/dev/xvda1 20G 11G 8.1G 57% /
tmpfs 1.9G 0 1.9G 0% /dev/shm
/dev/xvdb1 148G 131G 10G 93% /mnt/xvdb
1.3查看磁盘的I/O性能
iostat -d -x -k 110
Linux 2.6.32-431.23.3.el6.x86_64 (centos6.5) 2016年11月15日 _x86_64_(64位) (2 CPU) cpu核数
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
xvda 0.00 1.41 0.64 2.47 10.09 15.50 16.49 0.05 17.21 1.87 0.58
xvdb 0.00 2.96 0.83 0.67 22.86 14.54 49.70 0.09 58.64 3.54 0.53
Linux 2.6.32-431.23.3.el6.x86_64 ((******)) 2016年11月15日 _x86_64_ (4 CPU)
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
xvda 0.00 0.05 0.05 1.23 0.93 5.14 9.45 0.01 4.87 0.88 0.11
rrqm/s 每秒进行merge的读操作数目
wrqm/s 每秒进行merge的写操作数目
r/s 每秒完成的读I/O设备的次数
w/s 每秒完成的写I/O设备的次数
rkB/s 每秒读千字节数
wkB/s 每秒写千字节数
avgrq-sz 平均每次设备I/O操作的数据大小(即扇区)
avgqu-sz 平均I/O队列的长度
await 平均每次设备I/O操作的等待时间(微秒)
svctm 平均每次设备I/O操作的服务时间(微秒)
%util 一秒中有百分之多少用于I/O操作,或者说一秒中有多少时间I/O队列是非空闲的(微秒)
* await(I/O等待时间)的大小取决于服务时间(svctm),以及I/O队列的长度和I/O请求发出的模式
await 响应时间应该低于5ms,如果大于5ms就表示磁盘I/O压力很大。考虑更换响应更快的磁盘(如ssd固态磁盘)、调整内核elevator的算法、优化应用或者升级CPU
1.4查看某目录的大小
du -sh 目录名
du -sh company/
74M company/
1.5列出当前位置下所占用空间最多的前10个文件,由大到小排序
du -cks * |sort -rn | head -n 10
附录:
时间常用的:s(秒)、ms(毫秒)、μs(微秒)、ns(纳秒),其中:1s=1000ms,1 ms=1000μs,1μs=1000ns
字节与字符常用:1KB=1024B;1MB=1024KB=1024×1024B。其中1024=210。
1B(byte,字节)= 8 bit(见下文);
1KB(Kibibyte,千字节)=1024B= 2^10 B;
1MB(Mebibyte,兆字节,百万字节,简称“兆”)=1024KB= 2^20 B;
1GB(Gigabyte,吉字节,十亿字节,又称“千兆”)=1024MB= 2^30 B;
1TB(Terabyte,万亿字节,太字节)=1024GB= 2^40 B;
把B称为字节、b称为字位、KB称为千字节、MB称为兆字节、GB称为吉字节