标签:
当我们熟悉一定的基础命令时,我们往往会接触到一些高级的命令操作,或者说是陌生的命令操作。
一般源代码提供的程序安装需要通过配置、编译、安装三个步骤;
配置:
①要安装软件的依赖关系
②设置程序安装所需要的初始化信息,比如安装路径,需要安装哪些组件
③配置完成,会生成makefile文件供第二步make使用
编译:是对源文件进行编译链接生成可执行程序;
安装:做的工作就简单多了,就是将生成的可执行文件拷贝到配置时设置的初始路径下;
1.1. 配置
查询可用的配置选项: #./configure --help
配置路径: #./configure --prefix=/usr/local/snmp
–prefix是配置使用的最常用选项,设置程序安装的路径;
1.2. 编译
编译使用make编译: #make -f myMakefile
$@目标文件名
@^所有前提名,除副本
@+所有前提名,含副本
@<一个前提名
@?所有新于目标文件的前提名
@*目标文件的基名称
编译依赖的库
makefile编译过程中所依赖的非标准库和头文件路径需要显示指明:
CPPFLAGS -I标记非标准头文件存放路径
LDFLAGS -L标记非标准库存放路径
make -f myMakefile LDFLAGS=‘-L/var/xxx/lib -L/opt/mysql/lib‘
CPPFLAGS=‘-I/usr/local/libcom/include -I/usr/local/libpng/include‘
g++编译
应用:查询宏展开的中间文件:
在g++的编译选项中,添加 -E选项,然后去掉-o选项 ,重定向到一个文件中即可:
g++ -g -E unixApp.cpp -I/opt/app/source > midfile
1.3. 安装
安装做的工作就简单多了,就是将生成的可执行文件拷贝到配置时设置的初始路径下:
$make install
从系统层面和程序层面进行性能优化。
3.1. 分析系统瓶颈 ---top 命令
系统响应变慢:IO瓶颈、CPU瓶颈、内存瓶颈、程序导致的系统问题
使用top工具能够比较全面的查看我们关注的点:#top
进入交互模式后:
输入M,进程列表按内存使用大小降序排序,便于我们观察最大内存使用者使用有问题(检测内存泄漏问题);
输入P,进程列表按CPU使用大小降序排序,便于我们观察最耗CPU资源的使用者是否有问题;
top第三行显示当前系统的,其中有两个值很关键:
%id:空闲CPU时间百分比,如果这个值过低,表明系统CPU存在瓶颈;
%wa:等待I/O的CPU时间百分比,如果这个值过高,表明IO存在瓶颈;
3.2. 分析内存瓶颈 --free命令
一 使用free 命令
#free -mh
二 使用vmstat 命令
vmstat是Virtual Meomory 可实时动态监视操作系统的虚拟内存、进程、CPU活动。
vmstat [-V] [-n] [delay [count]]
-V表示打印出版本信息;
-n表示在周期性循环输出时,输出的头部信息仅显示一次;
delay是两次输出之间的延迟时间;
count是指按照这个时间间隔统计的次数。
/root$vmstat 5 5
procs -----------------memory-----------------------swap-- -----------io--------- -system-- ---------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 5524 172304 178400 969340 0 0 8 29 50 146 1 0 98 1 0
0 0 5524 172252 178400 969348 0 0 0 0 378 1089 19 3 78 0 0
3 0 5524 170888 178412 969352 0 0 0 31 636 1460 38 6 56 0 0
Procs Memory Swap system:
r:运行队列中进程数量 swpd:使用虚拟内存大小 si:每秒从交换区写到内存的大小
in: 每秒中断数,包括时钟中断
b:等待IO的进程数量 free:可用内存大小 so:每秒写入交换区的内存大小
cs: 每秒上下文切换数
buff:用作缓冲的内存大小 IO:现在Linux版本块的大小为1024b
CPU(以百分比表示)
cache:用作缓存的内存大小 bi:每秒读取的块数
us: 用户进程执行时间
bo:每秒写入的块数
sy: 系统进程执行时间
id: 空闲时间(包括IO等待时间)
wa: 等待IO时间
3.3. 分析IO瓶颈
如果IO存在性能瓶颈,top工具中的%wa会偏高;
进一步分析使用iostat工具:root$iostat -d -x -k 1 1
如果%iowait的值过高,表示硬盘存在I/O瓶颈。
如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。
如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间;
如果 await 远大于 svctm,说明I/O 队列太长,io响应太慢,则需要进行必要优化。
如果avgqu-sz比较大,也表示有大量io在等待。
3.4. 分析进程调用--pstack和pstrace
pstack用来跟踪进程栈,这个命令在排查进程问题时非常有用
查看bash程序进程栈:/opt/app/tdev1$ps -fe| grep bash
strace用来跟踪进程中的系统调用;这个工具能够动态的跟踪进程执行时的系统调用和所接收的信号。是一个非常有效的检测、指导和调试工具。系统管理员可以通过该命令容易地解决程序问题。
$strace cat /dev/null
命令实例1:
跟踪可执行程序
strace -f -F -o ~/straceout.txt myserver
-f -F选项告诉strace同时跟踪fork和vfork出来的进程,-o选项把所有strace输出写到~/straceout.txt里 面,myserver是要启动和调试的程序。
跟踪服务程序
strace -o output.txt -T -tt -e trace=all -p 28979
跟踪28979进程的所有系统调用(-e trace=all),并统计系统调用的花费时间,以及开始时间(并以可视化的时分秒格式显示),最后将记录结果存在output.txt文件里面。
3.5. 优化程序代码
编完代码,再优化
精力集中在优化那20%最耗时的代码上
gprof使用步骤
用gcc、g++、xlC编译程序时,使用-pg参数,如:g++ -pg -o test.exe test.cpp编译器会自动在目标代码中插入用于性能测试的代码片断,这些代码在程序运行时采集并记录函数的调用关系和调用次数,并记录函数自身执行时间和被调用函数的执行时间。
执行编译后的可执行程序,如:./test.exe。该步骤运行程序的时间会稍慢于正常编译的可执行程序的运行时间。程序运行结束后,会在程序所在路径下生成一个缺省文件名为gmon.out的文件,这个文件就是记录程序运行的性能、调用关系、调用次数等信息的数据文件。
使用gprof命令来分析记录程序运行信息的gmon.out文件,如:gprof test.exe gmon.out则可以在显示器上看到函数调用相关的统计、分析信息。上述信息也可以采用gprof test.exe gmon.out> gprofresult.txt重定向到文本文件以便于后续分析。
3.6. 其它工具
调试内存泄漏的工具valgrind,感兴趣的朋友可以google了解;
OProfile: Linux 平台上的一个功能强大的性能分析工具,使用参考 [f2] ;
除了上面介绍的工具,还有一些比较全面的性能分析工具,比如sar(Linux系统上默认不安装,需要手动安装下); 将sar的常驻监控工具打开后,能够收集比较全面的性能分析数据;
欢迎大家分享更好的思路,热切期待^^_^^ !
标签:
原文地址:http://blog.csdn.net/qq_29277155/article/details/51964425