linux性能分析工具、调试工具 浅析

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Linux性能分析工具、调试工具浅析irenezhan2013-3-29目录性能分析工具内存分析工具Linux内存解析freeI/O分析工具iostat文件分析工具lsof、readlinkcpu分析工具vmstat、top目录调试工具代码分析工具file、nm、c++filt、lddaddr2line代码耗时分析工具timegprof、strace、ltrace内存泄露检测工具valgrind、mtrace性能分析工具内存分析工具Linux内存解析freeI/O分析工具iostat文件分析工具lsof、readlinkcpu分析工具vmstat、topLinux内存浅析-swap用做虚拟内存的硬盘部分被称为交换空间(swapspace)。1、我们经常认为swap使用较少,内存就够用。2、有一种例外:如果一个占用很多物理内存的进程结束并释放内存时。被交换出的数据并不会自动地交换进内存。这时会出现一个状况:尽管有许多的空闲内存,仍然会有许多的交换空间正被使用。3、Linux经常使用一部分交换空间,以保持尽可能多的空闲物理内存。即使并没有什么事情需要内存,Linux也会交换出暂时不用的内存页面。这可以避免等待交换所需的时间:当磁盘闲着,就可以提前做好交换。Linux内存浅析-buffer和cache如果给所有应用分配足够内存后,物理内存还有剩余,linux会尽量再利用这些空闲内存,以提高整体I/O效率,其方法是把这部分剩余内存划分为cache及buffer。1、磁盘缓冲(diskbuffering):指将信息从磁盘上仅读入一次并将其存于内存中,除了第一次读以外,可以加快所有其它读的速度。被用作此目的的内存称为高速缓冲(BufferCache),即Cache。2、一个应用程序在内存中修改过数据后,因为写入磁盘速度较低,这些数据先存入buffer,在以后某个时间再写入磁盘如果在某个时刻,系统需要更多的内存,则会把cache部分擦除,并把buffer中的内容写入磁盘,从而把这两部分内存释放给系统使用,这样再次读取cache中的内容时,就需要重新从磁盘读取了。*/30****echo2/proc/sys/vm/drop_caches用作清除缓存,就是让cache减小sync命令让脏数据下盘,可以让buffer减小一点free作用:查看系统内存的使用情况(单位都是KB)•第二行(Mem):物理内存统计total:物理内存的总量used:已经使用的内存,包括分配给buffers和cached的,但buffers和cached中可能部分缓存并未实际使用。free:仅代表未被分配的内存第二行total=第二行used+free=第三行used+free•第三行(-/+buffers/cache):系统实际使用的内存总量和实际可用的内存总量used:Mem行used列-Mem行buffers列-Mem行cached列free:Mem行free列+Mem行buffers列+Mem行cached列•第四行(Swap):交换内存的总量、已使用量、空闲量总结:内存多是系统缓存占用的性能分析工具内存分析工具Linux内存解析freeI/O分析工具iostat文件分析工具lsof、readlinkcpu分析工具vmstat、topiostat作用:评估磁盘的利用率,从而探测到系统中的I/O瓶颈。数据分析出I/O请求的模式,以及I/O的速度和响应时间一般使用的时候用到-x(extended)r/s:每秒完成的读I/O设备次数,是实际读取的数量w/s:每秒完成的写I/O设备次数,是实际写入的数量每秒有2.36次设备I/O操作:总IO(io)/s=r/s(读)+w/s(写)但请求比这两个数据大,因为当系统调用需要读取数据时,VFS将请求发到各个FS,FS发现不同的读请求读取的是相同的block的数据,就会将这些请求合并。wrqm/s每秒有多少个写请求被merge了iostatrsec/s:每秒读扇区数wsec/s:每秒写扇区数rkB/s:每秒读K字节数wkB/s:每秒写K字节数avgrq-sz:平均每次设备I/O操作的数据大小(扇区)0.38次读,其数据量是52.62个扇区,因此1次读的扇区是52.62/0.38=138.4个扇区同理,1次写的扇区是12.18/1.98=6.15个扇区平均每次设备I/O操作的数据大小=138.4*读占得比重0.16+6.15*写占得比重0.84=27.48iostatavgqu-sz:平均I/O队列长度await:平均每次设备I/O操作的等待时间(毫秒)svctm:平均每次设备I/O操作的服务时间(毫秒)%util:一秒中有百分之多少的时间用于I/O操作,或者说一秒中有多少时间I/O队列是非空的如果%util接近100%,说明I/O请求太多,磁盘可能存在瓶颈了。rrqm/swrqm/sr/sw/srsec/swsec/srkB/swkB/s0.0044.901.0227.558.16579.574.08289.80avgrq-szavgqu-szawaitsvctm%util20.5722.3578.215.0014.291、平均每次设备I/O操作的等待时间平均每次I/O操作只需要5ms就可以完成(svctm),即1s可以处理200个请求但这里只有28.57次请求,每个I/O请求却需要等上78ms(await),为什么?因为同一时间发出的I/O请求太多平均等待时间=单个I/O服务时间*(1+2+…+请求总数-1)/请求总数,应用到上面的例子:平均等待时间=5ms*(1+2+…+28)/29=70ms,和iostat给出的78ms很接近。2、平均I/O队列长度一秒中有14.29%的时间I/O队列中是有请求的,所有29个请求都在142毫秒之内处理掉78.21*28.57=2232.8,表明每秒内的I/O请求总共需要等待2232.8ms。所以平均队列长度应为2232.8ms/142ms=15.7,而且在142ms中有可能某一个时间段是请求更为集中的时间,这时候的队列长度又比15.7更高,所以iostat返回的22.35还是有道理的。3、如果能看到每次操作的请求大小,就可以看到平均操作avgrq-sz个扇区是合并后的,一些I/O被合并以便更有效地像硬盘写入数据。iostat性能分析工具内存分析工具Linux内存解析freeI/O分析工具iostat文件分析工具lsof、readlinkcpu分析工具vmstat、toplsof作用:显示进程打开的文件(包括网络连接和硬件)lsof-ppid例子:intmain(void){open(/tmp/foo,O_CREAT|O_RDONLY);……#./testlsof&#lsof-p17596文件描述符是4lsof/proc/pid/fd/目录下的每一个fd文件都是符号链接,而此链接就指向被该进程打开的一个文件readlink作用:获得符号链接的目标#readlink/proc/3125/fd/3/tmp/fooreadlink不仅仅是一个shell命令,同时也是一个系统调用。头文件:#includeunistd.hssize_treadlink(constchar*path,char*buf,size_tbufsiz);参数:符号链接的路径,接收链接对象的缓冲、该缓冲的长度但readlink不会在填充的目标路径最后添加NULL字符。不过,它会返回对象路径的字符数量,这使得为字符串添加NULL结尾变得很简单。若readlink第一个参数指向一个文件而不是符号链接时,返回-1#ln-s/usr/bin/wcmy_link//第一个是src,第二个是新建的链接#./print-symlinkmy_link/usr/bin/wc性能分析工具内存分析工具Linux内存解析freeI/O分析工具iostat文件分析工具lsof、readlinkcpu分析工具vmstat、topvmstat作用:观察系统的进程状态、内存使用、虚拟内存使用、磁盘的IO、中断、上下文切换、CPU使用等r:运行的和等待(CPU时间片)运行的进程数,如果这个值长期大于系统cpu的个数,说明需要增加CPUb:在等待资源的进程数,比如正在等待I/O、或者内存交换等。vmstatSwap–si:交换内存使用,每秒由磁盘调入内存的量–so:交换内存使用,每秒由内存调入磁盘的量内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响。磁盘IO和CPU资源都会被消耗。Io–bi:读磁盘的数据总量(blocks/s),cache的目的就是降低该值–bo:写磁盘的数据总量随机磁盘读写的时候,这2个值越大(如超出1M),能看到CPU在IO等待的值也会越大这里in/out是对内存而言的System–in:每秒产生的中断次数–cs:每秒产生的上下文切换次数上面这2个值越大,会看到由内核消耗的CPU时间会越多。若值太大1、调低线程或者进程的数目2、看能否减少系统调用,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换(比如time)上下文切换次数过多表示你的CPU大部分浪费在上下文切换vmstatCpu都是百分比,相加为100%–us:用户进程消耗的CPU时间百分比该值较高说明用户进程消耗的CPU时间多,但是如果长期超过50%的使用,那么我们就该考虑优化程序算法或者进行加速了–sy:内核进程消耗的CPU时间百分比该值较高说明系统内核消耗的CPU资源多。如果太高,表示系统调用时间长,例如是IO操作频繁。根据经验,us+sy的参考值为80%,如果us+sy大于80%说明可能存在CPU资源不足。–id:CPU处在空闲状态时间百分比–wa:IO等待消耗的CPU时间百分比该值较高(30%)说明IO等待比较严重,这可能是由于磁盘大量作随机访问造成,也有可能是磁盘的带宽出现瓶颈(块操作)。b参数(等待资源的进程数)和wa参数(IO等待所占用的CPU时间的百分比)可配合iostat使用vmstat几个简单的例子:1、程序中有一个死循环,不断地求平方根procs中r增加,us上升;2、大量的系统调用,cs增加(上下文切换),sy增加3、大量的IO操作ddif=/dev/zeroof=/data/irenezhan/tmp/tmp_filebs=1Kcount=10000bi和bo增大(bo骤然升高,因为dd不断向磁盘写数据)vmstattop作用:查看各个进程的cpu、内存的使用情况top与vmstat的不同使用场景不同vmstat可看到整个机器的CPU,内存,IO的使用情况,而cpu侧重于看到各个进程的CPU使用率和内存使用率调试工具代码分析工具file、nm、c++filt、lddaddr2line代码耗时分析工具timegprof、strace、ltrace内存泄露检测工具valgrind、mtracefile作用:用来判断文件类型和使用使用了库(包括动态库和静态库)作用:获取二进制文件包含的符号信息如果没有指出目标文件,则目标文件为a.out输出:其值(十六进制)、类型、名字nmc++filt作用:将编码后的名称还原为原来的函数名称以及参数类型dlopen:../bin/ftnqqdisksetmd5_mcd_run.so:undefinedsymbol:_ZN12UserIndexPktC1Ev使用方法:c++filt_ZN12UserIndexPktC1EvUserIndexPkt::UserIndexPkt()因此我就知道没有把.o文件包含进来。原理:C++和JAVA为了实现函数重载机制,对函数名根据参数进行编码为低级别的符号,通常为加后缀,以对重载函数进行区别。ldd作用:显示可执行模块所链接的所有动态库的信息,如果目标程序没有链接动态库,则打印“notadynamicexecutable”输出:第一栏:需要用什么库;第二栏:实际用哪个库文件;第三栏:库文件装载地址。作用:当ulimit-c悲剧的等于0时

1 / 49
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功