Linux程序性能调优命令集合

#By huaixuzhi in 2011-11-24
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的使用---检测内存泄露
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值