测试系统性能

Publish: January 15, 2015 Category: Shell No Comments

磁盘:

使用 dd 命令,测试磁盘读写速度:

dd bs=block_size count=number_of_blocks if=/path/input_file of=/path/output_file

bs: 写入的块的大小

count: 写入多少个块

if: 输入文件

of: 输入文件

说明:当写入到驱动盘的时候,我们简单的从无穷无用字节的源 /dev/zero 读取,当从驱动盘读取的时候,我们读取的是刚才的文件,并把输出结果发送到无用的 /dev/null。在整个操作过程中, DD 命令会跟踪数据传输的速度并且报告出结果。


1、写测试:

dd bs=64k count=4k if=/dev/zero of=test conv=fdatasync

使用 conv=fdatasync 参数,dd会一次性写4K个64K字节到文件中去,这时候得到的是:读取 4K*64K 数据到内存并写入到磁盘上
所需的时间,这样处出来的时间是比较符合实际使用结果的。

dd bs=64k count=4k if=/dev/zero of=test oflag=dsync

使用 oflag=dsync 参数,dd在执行时每次都会进行同步写入操作。就是说,这条命令每次读取64k后就要先把这64k写入磁盘,

然后再读取下面这64k,一共重复128次。这可能是最慢的一种方式了,因为基本上没有用到写缓存(write cache)。


2、读测试:

现在读回这个文件。但是,得首先清除内存的缓存,以确保这个文件确实是从驱动盘读取的。

运行下面的命令来清除内存缓存

sudo sh -c "sync && echo 3 > /proc/sys/vm/drop_caches"

现在读取此文件

dd if=test of=/dev/null bs=4k




分析程序占用系统性能与资源方法

Publish: January 15, 2015 Category: Shell No Comments

内存:

使用pmap命令,查看指定进程占用系统内存信息:

pmap [选项] [进程号]
选项:
	-x	显示扩展格式
	-d	显示设备格式
	-q	不显示头尾行
	-V	显示版本
	
扩展格式和设备格式域:
	Address:	映像起始地址
	Kbytes:		映像大小
	RSS:		驻留集大小
	Dirty:		脏页大小
	Mode:		映像权限: r=read, w=write, x=execute, s=shared, p=private (copy on write)  
	Mapping:	映像支持文件,[anon]为已分配内存 [stack]为程序堆栈
	Offset:		文件偏移
	Device:		设备名

pmap -d 47225
47225:   qmail-rspawn
Address           Kbytes Mode  Offset           Device    Mapping
0000000000400000      36 r-x-- 0000000000000000 008:00011 qmail-rspawn
0000000000608000       4 rw--- 0000000000008000 008:00011 qmail-rspawn
0000000000609000      24 rw--- 0000000000000000 000:00000   [ anon ]
0000000000a86000     132 rw--- 0000000000000000 000:00000   [ anon ]
0000003368a00000    1240 r-x-- 0000000000000000 008:00005 libmysqlclient.so.16.0.0
0000003368b36000    2044 ----- 0000000000136000 008:00005 libmysqlclient.so.16.0.0
0000003368d35000     312 rw--- 0000000000135000 008:00005 libmysqlclient.so.16.0.0
0000003368d83000       4 rw--- 0000000000000000 000:00000   [ anon ]
0000003715000000     128 r-x-- 0000000000000000 008:00001 ld-2.12.so
000000371521f000       4 r---- 000000000001f000 008:00001 ld-2.12.so
0000003715220000       4 rw--- 0000000000020000 008:00001 ld-2.12.so
0000003715221000       4 rw--- 0000000000000000 000:00000   [ anon ]
0000003715400000      84 r-x-- 0000000000000000 008:00001 libz.so.1.2.3
0000003715415000    2044 ----- 0000000000015000 008:00001 libz.so.1.2.3
0000003715614000       4 r---- 0000000000014000 008:00001 libz.so.1.2.3
0000003715615000       4 rw--- 0000000000015000 008:00001 libz.so.1.2.3
0000003715800000    1580 r-x-- 0000000000000000 008:00001 libc-2.12.so
000000371598b000    2044 ----- 000000000018b000 008:00001 libc-2.12.so
0000003715b8a000      16 r---- 000000000018a000 008:00001 libc-2.12.so
0000003715b8e000       4 rw--- 000000000018e000 008:00001 libc-2.12.so
0000003715b8f000      20 rw--- 0000000000000000 000:00000   [ anon ]
0000003715c00000       8 r-x-- 0000000000000000 008:00001 libdl-2.12.so
0000003715c02000    2048 ----- 0000000000002000 008:00001 libdl-2.12.so
0000003715e02000       4 r---- 0000000000002000 008:00001 libdl-2.12.so
0000003715e03000       4 rw--- 0000000000003000 008:00001 libdl-2.12.so
0000003716000000      92 r-x-- 0000000000000000 008:00001 libpthread-2.12.so
0000003716017000    2048 ----- 0000000000017000 008:00001 libpthread-2.12.so
0000003716217000       4 r---- 0000000000017000 008:00001 libpthread-2.12.so
0000003716218000       4 rw--- 0000000000018000 008:00001 libpthread-2.12.so
0000003716219000      16 rw--- 0000000000000000 000:00000   [ anon ]
0000003716400000     524 r-x-- 0000000000000000 008:00001 libm-2.12.so
0000003716483000    2044 ----- 0000000000083000 008:00001 libm-2.12.so
0000003716682000       4 r---- 0000000000082000 008:00001 libm-2.12.so
0000003716683000       4 rw--- 0000000000083000 008:00001 libm-2.12.so
0000003717000000     116 r-x-- 0000000000000000 008:00001 libselinux.so.1
000000371701d000    2044 ----- 000000000001d000 008:00001 libselinux.so.1
000000371721c000       4 r---- 000000000001c000 008:00001 libselinux.so.1
000000371721d000       4 rw--- 000000000001d000 008:00001 libselinux.so.1
000000371721e000       4 rw--- 0000000000000000 000:00000   [ anon ]
0000003717400000      88 r-x-- 0000000000000000 008:00001 libresolv-2.12.so
0000003717416000    2048 ----- 0000000000016000 008:00001 libresolv-2.12.so
0000003717616000       4 r---- 0000000000016000 008:00001 libresolv-2.12.so
0000003717617000       4 rw--- 0000000000017000 008:00001 libresolv-2.12.so
0000003717618000       8 rw--- 0000000000000000 000:00000   [ anon ]
0000003718400000      88 r-x-- 0000000000000000 008:00001 libnsl-2.12.so
0000003718416000    2044 ----- 0000000000016000 008:00001 libnsl-2.12.so
0000003718615000       4 r---- 0000000000015000 008:00001 libnsl-2.12.so
0000003718616000       4 rw--- 0000000000016000 008:00001 libnsl-2.12.so
0000003718617000       8 rw--- 0000000000000000 000:00000   [ anon ]
0000003719000000    1748 r-x-- 0000000000000000 008:00005 libcrypto.so.1.0.1e
00000037191b5000    2048 ----- 00000000001b5000 008:00005 libcrypto.so.1.0.1e
00000037193b5000     108 r---- 00000000001b5000 008:00005 libcrypto.so.1.0.1e
00000037193d0000      48 rw--- 00000000001d0000 008:00005 libcrypto.so.1.0.1e
00000037193dc000      16 rw--- 0000000000000000 000:00000   [ anon ]
000000371a000000     452 r-x-- 0000000000000000 008:00001 libfreebl3.so
000000371a071000    2044 ----- 0000000000071000 008:00001 libfreebl3.so
000000371a270000       8 r---- 0000000000070000 008:00001 libfreebl3.so
000000371a272000       4 rw--- 0000000000072000 008:00001 libfreebl3.so
000000371a273000      16 rw--- 0000000000000000 000:00000   [ anon ]
000000371a400000      28 r-x-- 0000000000000000 008:00001 libcrypt-2.12.so
000000371a407000    2048 ----- 0000000000007000 008:00001 libcrypt-2.12.so
000000371a607000       4 r---- 0000000000007000 008:00001 libcrypt-2.12.so
000000371a608000       4 rw--- 0000000000008000 008:00001 libcrypt-2.12.so
000000371a609000     184 rw--- 0000000000000000 000:00000   [ anon ]
000000371ac00000      12 r-x-- 0000000000000000 008:00001 libcom_err.so.2.1
000000371ac03000    2044 ----- 0000000000003000 008:00001 libcom_err.so.2.1
000000371ae02000       4 r---- 0000000000002000 008:00001 libcom_err.so.2.1
000000371ae03000       4 rw--- 0000000000003000 008:00001 libcom_err.so.2.1
000000371b400000       8 r-x-- 0000000000000000 008:00001 libkeyutils.so.1.3
000000371b402000    2044 ----- 0000000000002000 008:00001 libkeyutils.so.1.3
000000371b601000       4 r---- 0000000000001000 008:00001 libkeyutils.so.1.3
000000371b602000       4 rw--- 0000000000002000 008:00001 libkeyutils.so.1.3
000000371bc00000     876 r-x-- 0000000000000000 008:00001 libkrb5.so.3.3
000000371bcdb000    2044 ----- 00000000000db000 008:00001 libkrb5.so.3.3
000000371beda000      40 r---- 00000000000da000 008:00001 libkrb5.so.3.3
000000371bee4000       8 rw--- 00000000000e4000 008:00001 libkrb5.so.3.3
000000371c400000     164 r-x-- 0000000000000000 008:00001 libk5crypto.so.3.1
000000371c429000    2048 ----- 0000000000029000 008:00001 libk5crypto.so.3.1
000000371c629000       4 r---- 0000000000029000 008:00001 libk5crypto.so.3.1
000000371c62a000       4 rw--- 000000000002a000 008:00001 libk5crypto.so.3.1
000000371c62b000       4 rw--- 0000000000000000 000:00000   [ anon ]
000000371c800000      40 r-x-- 0000000000000000 008:00001 libkrb5support.so.0.1
000000371c80a000    2044 ----- 000000000000a000 008:00001 libkrb5support.so.0.1
000000371ca09000       4 r---- 0000000000009000 008:00001 libkrb5support.so.0.1
000000371ca0a000       4 rw--- 000000000000a000 008:00001 libkrb5support.so.0.1
000000371cc00000     260 r-x-- 0000000000000000 008:00001 libgssapi_krb5.so.2.2
000000371cc41000    2048 ----- 0000000000041000 008:00001 libgssapi_krb5.so.2.2
000000371ce41000       4 r---- 0000000000041000 008:00001 libgssapi_krb5.so.2.2
000000371ce42000       8 rw--- 0000000000042000 008:00001 libgssapi_krb5.so.2.2
000000371d400000     388 r-x-- 0000000000000000 008:00005 libssl.so.1.0.1e
000000371d461000    2048 ----- 0000000000061000 008:00005 libssl.so.1.0.1e
000000371d661000      16 r---- 0000000000061000 008:00005 libssl.so.1.0.1e
000000371d665000      28 rw--- 0000000000065000 008:00005 libssl.so.1.0.1e
00007fa2b4c8b000   19924 rw--- 0000000000000000 000:00000   [ anon ]
00007fa2b6000000      48 r-x-- 0000000000000000 008:00001 libnss_files-2.12.so
00007fa2b600c000    2048 ----- 000000000000c000 008:00001 libnss_files-2.12.so
00007fa2b620c000       4 r---- 000000000000c000 008:00001 libnss_files-2.12.so
00007fa2b620d000       4 rw--- 000000000000d000 008:00001 libnss_files-2.12.so
00007fa2b620e000      40 rw--- 0000000000000000 000:00000   [ anon ]
00007fa2b6228000       4 rw--- 0000000000000000 000:00000   [ anon ]
00007fff1d47f000      84 rw--- 0000000000000000 000:00000   [ stack ]
00007fff1d5ff000       4 r-x-- 0000000000000000 000:00000   [ anon ]
ffffffffff600000       4 r-x-- 0000000000000000 000:00000   [ anon ]
mapped: 70144K    writeable/private: 20964K    shared: 0K

最后一行的值:
mapped 表示该进程映射的虚拟地址空间大小,也就是该进程预先分配的虚拟内存大小,即ps出的vsz
writeable/private  表示进程所占用的私有地址空间大小,也就是该进程实际使用的内存大小  
shared 表示进程和其他进程共享的内存大小


例子:

循环显示进程3066的设备格式的最后1行,间隔2秒
while true; do pmap -d 3066 | tail -1; sleep 2; done

利用sar工具确定系统性能瓶颈

Publish: January 12, 2015 Category: Shell No Comments

sar(System Activity Reporter系统活动情况报告)是目前 Linux 上较为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,
包括:文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程活动及IPC有关的活动等。
本文主要以CentOS 6.5 x64系统为例,介绍sar命令。

一、安装:
由于sar是sysstat包工具集中的其中一个工具,所以先要安装sysstat工具集:
去sysstat官网下载:http://pagesperso-orange.fr/sebastien.godard/download.html

tar xzvf sysstat-x.x.x.tar.gz
./configure
make
make install

阅读剩余部分...

查看Linux系统版本号等系统信息

Publish: January 6, 2015 Category: Shell No Comments

第一种方法:

# lsb_release -a
LSB Version:    :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch
Distributor ID: CentOS
Description:    CentOS release 6.5 (Final)
Release:        6.5
Codename:       Final

这个命令适用于所有遵守LSB规范的的linux,包括Redhat、SuSE、Debian、Ubuntu、Centos等发行版。


接下来的命令虽不能查看当前系统名和版本,但可以显示系统核心信息。

# uname
Linux
# uname -r
2.6.32-431.11.2.el6.toa.2.x86_64
 uname -a
Linux localhost.localdomain 2.6.32-431.11.2.el6.toa.2.x86_64 #1 SMP Wed Apr 9 15:55:33 CST 2014 x86_64 x86_64 x86_64 GNU/Linux

以下二种方法适用于RedHat,CentOS

# cat /etc/redhat-release
CentOS release 6.5 (Final)

# rpm -q centos-release  # 或 rpm -q redhat-release
centos-release-6-5.el6.centos.11.1.x86_64