1)查看硬盘的读取速度
/sbin/hdparm -t /dev/sda1 (hdparm 不是默认的/bin下的命令)
-----扩展:df 查看硬盘使用信息;fdisk 查看系统硬盘信息
2)我们可以使用profilng技术,在linux平台上,我们可以使用gprof和oprofile工具。
2-1)gprof是gnu binutils工 具之一,默认情况下linux系统当中都带有这个工具。
使用 -pg 选 项来编译hello.c,如果要得到带注释的源码清单,则需要增加 -g 选项。运行: gcc -pg -g -o hello hello.c
运行应用程序: ./hello 会 在当前目录下产生gmon.out文件
使用gprof来 分析gmon.out文件,需要把它和产生它的应用程序关联起来:
gprof hello gmon.out -p 得到每个函数占用的执行时间
gprof hello gmon.out -q 得到call graph, 包含了每个函数的调用关系,调用次数,执行时间等信息。
gprof hello gmon.out -A 得到一个带注释的“源 代码清单”,它会注释源码,指出每个函数的执行次数。这需要在编译的时候增加-g
2-2)oprofile ---- 功能及是使用再议
3)关于ps -aux | grep FileName
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
...
czbug 1980 0.0 1.7 180472 34416 ? Sl Feb25 0:01 /usr/bin/yakuake
...
--其中,关于内存的是VSZ和RSS这两项,通过man可以知道,RSS就是这个process实际占用的物理内存,VSZ是它的虚拟内存,及process现在没有使用但未来可能会分配的内存大小
--但是,把所有程序的RSS加起来,会比实际内存大好多,因为ps的结果中,RSS那部分包括了共享内存
4)pmap 显示一个目标文件或者链接库文件中的目标文件的各个段的大小
pmap -d PID/`pgrep filename` 还有 pmap -x PID ------具体含义 man
范例:
[root@localhost security]# pmap -d 4993
4993: -bash
Address Kbytes Mode Offset Device Mapping
08047000 596 r-x-- 0000000000000000 003:00006 bash bash的代码段
080dc000 28 rwx-- 0000000000094000 003:00006 bash bash的数据段
080e3000 280 rwx-- 00000000080e3000 000:00000 [ anon ] bash的堆
4d575000 84 r-x-- 0000000000000000 003:00006 ld-2.3.4.so 共享库的代码段
4d58a000 4 r-x-- 0000000000015000 003:00006 ld-2.3.4.so 共享库的数据段
4d58b000 4 rwx-- 0000000000016000 003:00006 ld-2.3.4.so 共享库的堆
4d6b5000 8 rwx-- 000000004d6b5000 000:00000 [ anon ] 匿名物理内存,
....
mapped: 180472K writeable/private: 19208K shared: 20544K
--------最重要的是最后一行,其中,writeable/private表现的是程序真正占用的物理内存,不包含shared libraries
每列的含义如下:
参数 解释
Address:00378000-0038d000 进程所占的地址空间
Kbytes 该虚拟段的大小
RSS 设备号(主设备:次设备)
Anon 设备的节点号,0表示没有节点与内存相对应
Locked 是否允许swapped
Mode 权限:r=read, w=write, x=execute, s=shared, p=private(copy on write)
Mapping: bash 对应的映像文件名
-----扩展:使用while循环不停的检测某进程的内存占用
while true; do pmap -x 13894 | tail -1;sleep 1;done
5)top 命令 Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况
top是个强大到无法理喻的命令------在top下,按1会显示有几个CPU,及每个CPU的使用率
其中:%mem 内存使用率,virt 是虚拟内存,res是常驻内存,shr是共享内存
top命令下要查看某个用户启动的进程:先输入u,然后输入用户名,再回车
使用top动态查看某个进程 top -p `pgrep csg`
6)文件子系统的调优-----ulimit -a 用来显示当前的各种用户进程限制
可做的调整:------都是暂时调整,适用于此Shell终端连接情况下
设置Linux用户最大进程数 ulimit -u 10000
设置每个进程可打开的文件数目(缺省值是1024) ulimit -n xx
数据段长度:ulimit -d unlimited
最大内存大小:ulimit -m unlimited
堆栈大小:ulimit -s unlimited
CPU 时间:ulimit -t unlimited
虚拟内存:ulimit -v unlimited
7) lsof 命令 :list open files
此命令位于 /usr/sbin/lsof,只有root可以执行,但是可以使用ln -s /usr/sbin/lsof /bin/.下,然后每个人都可以用了:)
lsof abc.txt 显示开启文件abc.txt的进程
lsof -i :22 知道22端口现在运行什么程序 #####important
lsof -c abc 显示abc进程现在打开的文件 #####important
lsof -g gid 显示归属gid的进程情况
lsof +d /usr/local/ 显示目录下被进程开启的文件
lsof +D /usr/local/ 同上,但是会搜索目录下的目录,时间较长
lsof -d 4 显示使用fd为4的进程
-------ex:lsof -i udp:6501 查看udp+6501口跑的程序-----太具体的用法还得man
注:关于几点注解-----使用ln -s source targe 中的source必须是绝对路径,否则会出现too many levels of symbolic links的错误
8) vmstat 命令 : Report virtual memory statistics,reports information about processes, memory, paging,block IO, traps, and cpu activity.
一般VMSTAT工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数。例如:vmstat 1 2
使用vmstat后,命令详解:
Procs
r: 等待运行的进程数 b: 处在非中断睡眠状态的进程数 w: 被交换出去的可运行的进程数。此数由 linux 计算得出,但linux并不耗尽交换空间
Memory
swpd: 虚拟内存使用情况,单位:KB
free: 空闲的内存,单位KB
buff: 被用来做为缓存的内存数,单位:KB
Swap
si: 从磁盘交换到内存的交换页数量,单位:KB/秒
so: 从内存交换到磁盘的交换页数量,单位:KB/秒
IO
bi: 发送到块设备的块数,单位:块/秒
bo: 从块设备接收到的块数,单位:块/秒
System
in: 每秒的中断数,包括时钟中断
cs: 每秒的环境(上下文)切换次数
CPU
按 CPU 的总使用百分比来显示
us: CPU 使用时间
sy: CPU 系统使用时间
id: 闲置时间
----目前说来,对于服务器监控有用处的度量主要有:r(运行队列)/pi(页导入)/us(用户CPU)/sy(系统CPU)/id(空闲)
----如果r经常大于4 ,且id经常少于40,表示cpu的负荷很重。
----(如果bi,bo 长期不等于0,表示内存不足)
注--通过VMSTAT识别CPU瓶颈:r(运行队列)展示了正在执行和等待CPU资源的任务个数。当这个值超过了CPU数目,就会出现CPU瓶颈了
9) free命令
[root@localhost ~]# free
total used free shared buffers cached
Mem: 4038116 4010292 27824 0 205228 1343276
-/+ buffers/cache: 2461788 1576328
Swap: 8289500 254076 8035424
第一行:
total 物理内存总数: 4038116
used 已经使用的内存数: 4010292
free 空闲的内存数: 27824
shared 当前已经废弃不用,总是0
buffers 即Buffer Cache内存数: 205228
cached 即Page Cache内存数: 1343276
关系:total = used + free
第二行:
-/+ buffers/cache的意思相当于:
-buffers/cache 的内存数:2461788 (等于第1行的 used – buffers – cached),实际上是应用程序所使用的内存。
+buffers/cache 的内存数: 1576328 (等于第1行的 free + buffers + cached),是对应用程序来说还剩余的内存。
可见-buffers/cache反映的是被程序实实在在吃掉的内存,而+buffers/cache反映的是可以挪用的内存总数。
对操作系统来讲buffers/cached 都是属于被使用,所以它认为free只有27824.
对应用程序来讲是(-/+ buffers/cach).buffers/cached 是等同可用的,因为buffer/cached是为了提高程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。
第三行是交换分区swap, 列出已使用、空闲的swap.
----所以我们看linux,只要不用swap的交换空间,就不用担心自己的内存太少.如果常常swap用很多,可能你就要考虑加物理内存了.这也是linux看内存是否够用的标准.
----如果是应用服务器的话,一般只看第二行,+buffers/cache,即对应用程序来说free的内存太少了,也是该考虑优化程序或加内存了。
10) time 命令--以下为详解 ---time command
1)实际时间(real time): 从command命令行开始执行到运行终止的消逝时间;
2)用户CPU时间(user CPU time): 命令执行完成花费的用户CPU时间,即命令在用户态中执行时间总和;
3)系统CPU时间(system CPU time): 命令执行完成花费的系统CPU时间,即命令在核心态中执行时间总和
11) uptime ---以下为显示内容详解
17:18:02 up 58 days, 7:14, 16 users, load average: 0.04, 0.06, 0.02
现在的时间
系统开机运转到现在经过的时间
连线的使用者数量
最近一分钟,五分钟和十五分钟的系统负载
12)nice 命令 ----用来设置优先级,可使用数值为-20 ~ 19,数值越小优先越高.(普通用户只能在0 ~ 19之间调整应用程序)
语法:nice -n <优先级> 指令 ----ex:nice -n 5 ls
注:nice 值并非真正的优先级,而应该是 PRI(new)=PRI(old) + nice,即nice设定的值为优先级的修正数值。而PRI才是真正的被进程执行的优先级,值越小,越早被执行 ----- 使用 ps -l 查看
注:renice命令允许用户修改一个正在运行的进程的优先级
##Today is 2011-12-7
13)**查看网卡流量(包括对某个IP的流量) iftop
这个东西不是自带的,而且依赖两个包tcpdump和libpcap(不出意外,机器上已经默认安装)
到官网下载iftop的.tar.gz,然后XX,再然后./configue--make--make install
安装后ln -s到/bin/下,即可使用
显示的东西:
第一行为带宽,这里为1Mbit,不是字节哦.
连接列表,最后三个分别是2秒,10秒和40秒的平均流量
=>代表发送,<= 代表接收
最后三行表示发送,接收和全部的流量,第二列为你运行iftop到目前流量,第三列为高峰值,第四列为平均值。
关于命令:
-B ---- Display bandwidth in bytes (以字节统计)
-N ---- don't convert port numbers to services (直接显示端口号,不显示服务名称)
-P ---- show ports as well as hosts(按照端口对应ip地址) *****
等
14)查看网卡收发包情况:netstat -sn
15)cflow : 生成C语言流程图,直接使用 cflow *.c 即可
16)valgrind的使用---检测内存泄露
-----扩展:df 查看硬盘使用信息;fdisk 查看系统硬盘信息
2)我们可以使用profilng技术,在linux平台上,我们可以使用gprof和oprofile工具。
2-1)gprof是gnu binutils工 具之一,默认情况下linux系统当中都带有这个工具。
使用 -pg 选 项来编译hello.c,如果要得到带注释的源码清单,则需要增加 -g 选项。运行: gcc -pg -g -o hello hello.c
运行应用程序: ./hello 会 在当前目录下产生gmon.out文件
使用gprof来 分析gmon.out文件,需要把它和产生它的应用程序关联起来:
gprof hello gmon.out -p 得到每个函数占用的执行时间
gprof hello gmon.out -q 得到call graph, 包含了每个函数的调用关系,调用次数,执行时间等信息。
gprof hello gmon.out -A 得到一个带注释的“源 代码清单”,它会注释源码,指出每个函数的执行次数。这需要在编译的时候增加-g
2-2)oprofile ---- 功能及是使用再议
3)关于ps -aux | grep FileName
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
...
czbug 1980 0.0 1.7 180472 34416 ? Sl Feb25 0:01 /usr/bin/yakuake
...
--其中,关于内存的是VSZ和RSS这两项,通过man可以知道,RSS就是这个process实际占用的物理内存,VSZ是它的虚拟内存,及process现在没有使用但未来可能会分配的内存大小
--但是,把所有程序的RSS加起来,会比实际内存大好多,因为ps的结果中,RSS那部分包括了共享内存
4)pmap 显示一个目标文件或者链接库文件中的目标文件的各个段的大小
pmap -d PID/`pgrep filename` 还有 pmap -x PID ------具体含义 man
范例:
[root@localhost security]# pmap -d 4993
4993: -bash
Address Kbytes Mode Offset Device Mapping
08047000 596 r-x-- 0000000000000000 003:00006 bash bash的代码段
080dc000 28 rwx-- 0000000000094000 003:00006 bash bash的数据段
080e3000 280 rwx-- 00000000080e3000 000:00000 [ anon ] bash的堆
4d575000 84 r-x-- 0000000000000000 003:00006 ld-2.3.4.so 共享库的代码段
4d58a000 4 r-x-- 0000000000015000 003:00006 ld-2.3.4.so 共享库的数据段
4d58b000 4 rwx-- 0000000000016000 003:00006 ld-2.3.4.so 共享库的堆
4d6b5000 8 rwx-- 000000004d6b5000 000:00000 [ anon ] 匿名物理内存,
....
mapped: 180472K writeable/private: 19208K shared: 20544K
--------最重要的是最后一行,其中,writeable/private表现的是程序真正占用的物理内存,不包含shared libraries
每列的含义如下:
参数 解释
Address:00378000-0038d000 进程所占的地址空间
Kbytes 该虚拟段的大小
RSS 设备号(主设备:次设备)
Anon 设备的节点号,0表示没有节点与内存相对应
Locked 是否允许swapped
Mode 权限:r=read, w=write, x=execute, s=shared, p=private(copy on write)
Mapping: bash 对应的映像文件名
-----扩展:使用while循环不停的检测某进程的内存占用
while true; do pmap -x 13894 | tail -1;sleep 1;done
5)top 命令 Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况
top是个强大到无法理喻的命令------在top下,按1会显示有几个CPU,及每个CPU的使用率
其中:%mem 内存使用率,virt 是虚拟内存,res是常驻内存,shr是共享内存
top命令下要查看某个用户启动的进程:先输入u,然后输入用户名,再回车
使用top动态查看某个进程 top -p `pgrep csg`
6)文件子系统的调优-----ulimit -a 用来显示当前的各种用户进程限制
可做的调整:------都是暂时调整,适用于此Shell终端连接情况下
设置Linux用户最大进程数 ulimit -u 10000
设置每个进程可打开的文件数目(缺省值是1024) ulimit -n xx
数据段长度:ulimit -d unlimited
最大内存大小:ulimit -m unlimited
堆栈大小:ulimit -s unlimited
CPU 时间:ulimit -t unlimited
虚拟内存:ulimit -v unlimited
7) lsof 命令 :list open files
此命令位于 /usr/sbin/lsof,只有root可以执行,但是可以使用ln -s /usr/sbin/lsof /bin/.下,然后每个人都可以用了:)
lsof abc.txt 显示开启文件abc.txt的进程
lsof -i :22 知道22端口现在运行什么程序 #####important
lsof -c abc 显示abc进程现在打开的文件 #####important
lsof -g gid 显示归属gid的进程情况
lsof +d /usr/local/ 显示目录下被进程开启的文件
lsof +D /usr/local/ 同上,但是会搜索目录下的目录,时间较长
lsof -d 4 显示使用fd为4的进程
-------ex:lsof -i udp:6501 查看udp+6501口跑的程序-----太具体的用法还得man
注:关于几点注解-----使用ln -s source targe 中的source必须是绝对路径,否则会出现too many levels of symbolic links的错误
8) vmstat 命令 : Report virtual memory statistics,reports information about processes, memory, paging,block IO, traps, and cpu activity.
一般VMSTAT工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数。例如:vmstat 1 2
使用vmstat后,命令详解:
Procs
r: 等待运行的进程数 b: 处在非中断睡眠状态的进程数 w: 被交换出去的可运行的进程数。此数由 linux 计算得出,但linux并不耗尽交换空间
Memory
swpd: 虚拟内存使用情况,单位:KB
free: 空闲的内存,单位KB
buff: 被用来做为缓存的内存数,单位:KB
Swap
si: 从磁盘交换到内存的交换页数量,单位:KB/秒
so: 从内存交换到磁盘的交换页数量,单位:KB/秒
IO
bi: 发送到块设备的块数,单位:块/秒
bo: 从块设备接收到的块数,单位:块/秒
System
in: 每秒的中断数,包括时钟中断
cs: 每秒的环境(上下文)切换次数
CPU
按 CPU 的总使用百分比来显示
us: CPU 使用时间
sy: CPU 系统使用时间
id: 闲置时间
----目前说来,对于服务器监控有用处的度量主要有:r(运行队列)/pi(页导入)/us(用户CPU)/sy(系统CPU)/id(空闲)
----如果r经常大于4 ,且id经常少于40,表示cpu的负荷很重。
----(如果bi,bo 长期不等于0,表示内存不足)
注--通过VMSTAT识别CPU瓶颈:r(运行队列)展示了正在执行和等待CPU资源的任务个数。当这个值超过了CPU数目,就会出现CPU瓶颈了
9) free命令
[root@localhost ~]# free
total used free shared buffers cached
Mem: 4038116 4010292 27824 0 205228 1343276
-/+ buffers/cache: 2461788 1576328
Swap: 8289500 254076 8035424
第一行:
total 物理内存总数: 4038116
used 已经使用的内存数: 4010292
free 空闲的内存数: 27824
shared 当前已经废弃不用,总是0
buffers 即Buffer Cache内存数: 205228
cached 即Page Cache内存数: 1343276
关系:total = used + free
第二行:
-/+ buffers/cache的意思相当于:
-buffers/cache 的内存数:2461788 (等于第1行的 used – buffers – cached),实际上是应用程序所使用的内存。
+buffers/cache 的内存数: 1576328 (等于第1行的 free + buffers + cached),是对应用程序来说还剩余的内存。
可见-buffers/cache反映的是被程序实实在在吃掉的内存,而+buffers/cache反映的是可以挪用的内存总数。
对操作系统来讲buffers/cached 都是属于被使用,所以它认为free只有27824.
对应用程序来讲是(-/+ buffers/cach).buffers/cached 是等同可用的,因为buffer/cached是为了提高程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。
第三行是交换分区swap, 列出已使用、空闲的swap.
----所以我们看linux,只要不用swap的交换空间,就不用担心自己的内存太少.如果常常swap用很多,可能你就要考虑加物理内存了.这也是linux看内存是否够用的标准.
----如果是应用服务器的话,一般只看第二行,+buffers/cache,即对应用程序来说free的内存太少了,也是该考虑优化程序或加内存了。
10) time 命令--以下为详解 ---time command
1)实际时间(real time): 从command命令行开始执行到运行终止的消逝时间;
2)用户CPU时间(user CPU time): 命令执行完成花费的用户CPU时间,即命令在用户态中执行时间总和;
3)系统CPU时间(system CPU time): 命令执行完成花费的系统CPU时间,即命令在核心态中执行时间总和
11) uptime ---以下为显示内容详解
17:18:02 up 58 days, 7:14, 16 users, load average: 0.04, 0.06, 0.02
现在的时间
系统开机运转到现在经过的时间
连线的使用者数量
最近一分钟,五分钟和十五分钟的系统负载
12)nice 命令 ----用来设置优先级,可使用数值为-20 ~ 19,数值越小优先越高.(普通用户只能在0 ~ 19之间调整应用程序)
语法:nice -n <优先级> 指令 ----ex:nice -n 5 ls
注:nice 值并非真正的优先级,而应该是 PRI(new)=PRI(old) + nice,即nice设定的值为优先级的修正数值。而PRI才是真正的被进程执行的优先级,值越小,越早被执行 ----- 使用 ps -l 查看
注:renice命令允许用户修改一个正在运行的进程的优先级
##Today is 2011-12-7
13)**查看网卡流量(包括对某个IP的流量) iftop
这个东西不是自带的,而且依赖两个包tcpdump和libpcap(不出意外,机器上已经默认安装)
到官网下载iftop的.tar.gz,然后XX,再然后./configue--make--make install
安装后ln -s到/bin/下,即可使用
显示的东西:
第一行为带宽,这里为1Mbit,不是字节哦.
连接列表,最后三个分别是2秒,10秒和40秒的平均流量
=>代表发送,<= 代表接收
最后三行表示发送,接收和全部的流量,第二列为你运行iftop到目前流量,第三列为高峰值,第四列为平均值。
关于命令:
-B ---- Display bandwidth in bytes (以字节统计)
-N ---- don't convert port numbers to services (直接显示端口号,不显示服务名称)
-P ---- show ports as well as hosts(按照端口对应ip地址) *****
等
14)查看网卡收发包情况:netstat -sn
15)cflow : 生成C语言流程图,直接使用 cflow *.c 即可
16)valgrind的使用---检测内存泄露