第一篇:Linux下检查内存泄漏、系统性能的系列工具--s
Linux下检查内存泄漏、系统性能的系列工具
Pub Date:2008-02-16 10:45:34 Author: moon Click:1641、定位内存泄漏问题
在我先前的博客文章中我介绍了如何在Windows.NET环境下如何定位内存泄漏问题,今天我就来介绍一个在Linux下定位此类问题的工具Valgrind和Callgrind,以及基于 Callgrind分析结果的GUI分析工具KCachegrind。Callgrind和KCachegrind在后面的专题讲。
首先介绍Valgrind,网址是:
Valgrind的Memcheck使用举例:
假定你当前的程序,myprog arg1 arg2
若使用Memcheck,命令如下:
valgrind--leak-check=yes myprog arg1 arg2
Memcheck是Valgrind的缺省工具。--leak-check选项将打开内存泄漏的详细检测器。
如果说你的内存泄漏错误代码,即myprog如下所示:
(1)#include
(2)
(3)void f(void)
(4){
(5)int* x = malloc(10 * sizeof(int));
(6)x[10] = 0;// problem 1: heap block overrun
(7)} // problem 2: memory leak--x not freed
(8)
(9)int main(void)
(10){
(11)f();
(12)return 0;
(13)}
运行过程中,问题1的错误指示消息将会显示出来,主要是内存越界
==19182== Invalid write of size 4
==19182== at 0x804838F: f(example.c:6)
==19182== by 0x80483AB: main(example.c:11)
==19182== Address 0x1BA45050 is 0 bytes after a block of size 40 alloc'd
==19182== at 0x1B8FF5CD: malloc(vg_replace_malloc.c:130)
==19182== by 0x8048385: f(example.c:5)
==19182== by 0x80483AB: main(example.c:11)
对于问题2,内存泄漏的消息如下所示:
==19182== 40 bytes in 1 blocks are definitely lost in loss record 1 of 1
==19182== at 0x1B8FF5CD: malloc(vg_replace_malloc.c:130)
==19182== by 0x8048385: f(a.c:5)
==19182== by 0x80483AB: main(a.c:11)
怎么样?这里只是一个非常简单的例子,你不妨可以一试。
2、系统性能瓶颈的分析工具
这一节我们主要讲两个关联在一起的系统性能瓶颈的分析工具Callgrind和KCachegrind。这两个工具的主页是:
但文中的参数不对,你可以从Novel的FTP镜像服务器列表中灵活选择:
我使用的服务器参数是:mirrors.kernel.org,路径是/suse/i386/9.2
然后你在Yast中搜索kdesdk3-profile,安装即可。
或者你可以从Novell对Suse9.2的近期KDE应用的列表中下载RPM自行安装也可以
看 到kdesdk3-profile就是我们要找的,其描述如下:This package contains KCachegrind and the needed Calltree skin for Valgrind.You can profile your application with Valgrind using Calltree skin and display the result in KCachegrind to easily find bottlenecks.直接下载地址是:ftp://ftp.suse.com/pub/suse/x86_64/supplementary/KDE/update_for_9.2/applications/.link/kdesdk3-profile.rpm
如果你自行手动编译安装,请参考:http://kcachegrind.sourceforge.net/cgi-bin/show.cgi/KcacheGrindInstallation
安装完后,下面我就来讲讲如何使用这两个工具:
首先用Callgrind来加载我的应用程序myprog, 命令是callgrind myprog,系统运行完后,或者自己使用Ctrl+C强制停止后,系统会生成一个文件,格式如下:callgrind.out.pid
Callgrind还用很多复杂的应用,可以参见:http://kcachegrind.sourceforge.net/cgi-bin/show.cgi/KcacheGrindUsage,这里不再详述。
下面介绍一下KCachegrind对输出的数据文件的分析图,下面是一个参考图,该图中包含三个子视图,Cost Type View, Call Graph View and Callee Map View。
在Callee Map View中,你能看到每一个函数的开销百分比包括Inclusive,即涵带子函数的总开销和Self,函数自己的开销,另外每一个函数的调用次数也列写在上面。
在Cost Type View中,每一个函数通过调用关系以模块的形式表现出来,往往在这里,通过显示的模块大小,并且结合Callee Map View中的函数Self开销,可以发现系统中的瓶颈函数。这点非常实用。
最后一个Call Graph View可以分析出函数的调用关系和流程,这是一个非常好的辅助工具,帮助你快速理解系统的工作流Work Flow。
第二篇:如何检查制冷剂泄漏维护空调系统制冷功能
如何检查制冷剂泄漏维护空调系统制冷功能
空调系统已逐渐成为轿车的标准设备。现有汽车使用的空调器种类较多,其结构大同小异。维护间隔一般应为一年一次或视需进行。在使用中如发现其制冷效果不佳时,应进行检查,故障一般多为制冷剂泄漏所致。可以通过以下步骤进行检查修理。
1.查找泄漏部位
目前车辆上使用的空调系统一般为单冷开启式,制冷剂多采用氟里昂(R12或氟里昂的替代产品134a)。在使用中,制冷剂易从各连接接头、油封处泄漏,制冷剂泄漏将会导致制冷效果差或不制冷等现象。
(1)检查漏油痕迹。在空调制冷循环系统中,冷却油是用来润滑密封轴承以及压缩机内其他运动部件的,少量的润滑油将会与制冷剂一起进入制冷循环系统中。如果制冷循环系统发生泄漏,泄漏处就会出现油渍,所以在检查中,发现管路及接头处有油渍,就可以确定该处有泄漏故障,应进行修理。
(2)观察检视窗,判定制冷剂泄漏情况。起动发动机(约1000r/min),打开制冷控制开关(A/C),将温度开关控制杆置于COLD(冷)位置,风扇开关开到最大的位置,可以从检查窗处观察到制冷剂的流动状态,来判断制冷循环系统中有无泄漏,制冷剂流动正常:制冷剂大体上透明,此时出风口的风是冷的。制冷系统的状态正常。制冷剂不足:制冷剂不足时,就会经常看到气泡流动,制冷剂呈乳白色,这时制冷效果不佳。
没有制冷剂:如果制冷系统严重泄漏,观察玻璃窗内就什么也看不到,此时空调系统不会制冷。富康轿车的储液罐上有A、B两个检视窗。检视窗A可以判断储液罐中干燥剂的水分含量是否饱和。若呈蓝色,表示正常;若呈红色,表示水分已呈饱和状态。应缓慢的排尽空调系统中的制冷剂,更换储液罐中的干燥剂,然后重新加注制冷剂。B检视窗的作用和前面介绍的内容相同,主要用于观察制冷剂的情况。
在检查时,所有连接部位或冷凝器表面一旦发现油渍,一般都说明此处有制冷剂泄漏。发现有泄漏现象时,应及时进行排除泄漏故障,补充制冷剂和润滑油,以防泄漏润滑油,损坏空调系统。
2.检查空调系统的工作情况
检查时将汽车停放在通风良好的场地上,保持发动机中等转速,将空调机风速开到最大挡,使车内空气内循环。
(1)从各部的温度判断空调状态。用手触摸空调系统及各部件,检查表面温度。正常情况下,低压管路呈低温状态,高压管路呈高温状态。
高压管路:压缩机出口冷凝器储液罐膨胀阀进口处。这些部件应该先暖后热,手摸时应特别小心,避免被烫伤。如果在其中某一点发现有特别热的部位,则说明此处有问题,散热不好。如果某一点特别凉或结霜,也说明此处有问题,可能有堵塞。干燥储液器进出口之间若有明显温差,说明此处有堵塞。
低压管路:膨胀阀出口蒸发器压缩机进口,这些表面应该由凉到冷,但膨胀阀处不应发生霜冻现象。
压缩机高低侧之间应该有明显的温差,若没有明显温差,则说明空调系统内没有制冷剂,系统有明显的泄漏。
(2)清理空调装置上的杂物。检查蒸发器通道及冷凝器表面,以及冷凝器与发动机水箱之间(停机检查)是否有杂物、污泥,要注意清理,仔细清洗。冷凝器可用毛刷轻轻刷洗,注意不能用蒸气冲洗。
(3)检查调整空调皮带。检查皮带松紧度是否适宜、表面是否完好(与发动机皮带检查调整相同)。以上检查如果发现异常时,应进行修理。
第三篇:Linux系统下的压片转换工具Mencoder应用[最终版]
首先,确定你的系统内码是中文编码,如GB2312,GBK。如果不清楚,请在终端下输入locale查看,不是就修改。这里,我提供在Suse下的修改方法:启动Yast2控制中心,打开“系统”——>“/etc/sysconfig编辑器”,展开“System Environment Language“项,把你面以RC打头的项的值全改成GB2312,完成后还要修改/etc/fstab文件,将Windows分区的参数修改成这样:/dev/hdb1 /windows/C vfat defaults,iocharset=gb2312,codepage=936 0 0
重启系统,接着再进行下列操作:
1.xmms
在字体设置中把“选项”和“主窗口”中字体设为一个中文字体,编码设为一个中文编码,并在最后加上“,fixed,*”,如“-zyec-simsun-medium-r-normal-*-12-*-*-*-c-*-gbk,fixed,*”,同时勾上“使用字体集”和“使用X字体”,点击确定,完成。
2.amaroK
设置——配置amaroK,把“ID3v1”和“shoutcast元数据”选上,并把编码改为GB2312,完成。
3.kaffeine
修改~/.kde/share/config下的kaffeinerc文件,把Alternate Encoding Name=UTF-8改为Alternate Encoding Name=GB2312,保存,完成。
4.RhythmBox
在gnome-cn上看到以gstreamer0.8.8为后台程序的RhythmBox的ID3乱码问题已得到解决,不过以xine-lib为后台就没这么幸运了,你需要下载一个补丁重新编译RhythmBox,这是补丁的下载地址:http://61.153.200.30/lucida/linux-patch/files/rhythmbox-0.8.4-cjk.diff
5.Juk
本身不支持中文ID3V1,必须打补丁重新编译,这是补丁的下载地址:http://61.153.200.30/lucida/linux-patch/files/juk-2.0-cjk.diff
6.noatun
同样需要打补丁,不过不是重新编译noatun,需要重新编译的是KDEMultiMedia。这是补丁的下载地址:http://61.153.200.30/lucida/linux-patch/files/k-mp3meta.diff
第四篇:黑马程序员C语言教程:linux系统下好用的文件恢复工具
Linux系统下好用的文件恢复工具
不同于windows,在Linux下我们常常借助命令操作整个文件系统。而删除数据是使用过程中出现较为频繁的操作。但命令rm删除掉的文件不像我们熟悉的windows躺在回收站中,轻轻一拉就回来。因此在操作过程中需要大家对Linux系统命令及文件存储特性有所了解。掌握其基本原理后,再借助工具完成数据恢复就不那么困难了。
许多同学习惯于Windows系统操作电脑的方式,使用鼠标配合图形界面完成操作。不得不承认这种方式十分简洁,易于学习和操作。这也是很多人初学Linux系统不习惯的重要原因之一。
Linux系统秉持Unix操作系统的作风,受时代潮流的影响也加入了图形操作系统的方法,同时保留了使用命令操系统的特性。因此,要想彻底掌握Linux系统的操作,必须要熟练使用常用的系统命令。像创建文件的touch命令,复制文件的cp命令,查看目录的ls命令以及查看文件内容的cat命令,既能挪动文件位置又能修改文件名的mv命令,以及删除文件的rm命令等都是Linux入门必须熟练掌握的系统操作命令。下面介绍两款实用的,借助字符终端,恢复文件的工具。testdisk和photorec。
testdisk的使用 testdisk简介
testdisk 是分区表恢复、raid 恢复、分区恢复的开源免费工具。它可以解决一些因为分区的原因而造成数据无法访问的问题。可以帮助你恢复丢失的分区,让磁盘重新变得可以启动,整理分区表,恢复主引导记录,恢复引导扇区以及文件系统表,testdisk支持如下文件系统:FAT12/FAT16/FAT32/NTFS/ext2/ext3/ext4。
testdisk 支持的功能: 修复分区表, 恢复已删除分区,用 FAT32 备份表恢复启动扇区,重建 FAT12/FAT16/FAT32 启动扇区,修复 FAT 表,重建 NTFS 启动扇区,用备份表恢复 NTFS 启动扇区,用 mft 镜像表修复 mft 表,查找 ext2/ext3 备份的 superblock,从 FAT,NTFS 及ext2文件系统恢复删除文件,从已删除的 FAT,NTFS 及 ext2/ext3 分区复制文件。
使用步骤
首先安装
#apt-get install testdisk 无法在线安装的用户可以在http://www.xiexiebang.com/wiki/TestDisk_Download 下载源代码编译安装。但需要注意,下载安装 testdisk 之前要安装几个辅助软件包 libjpeg8,libncursesw5,libuuid1,zlib1g。
启动testdisk #testdisk testdisk 启动后的工作界面首先要指定恢复操作过程中欲创建的的 log 文件(testdisk.log)。见下图。
[Create]新建一个log [Append]在现有log上追加 [No Log]不使用log 选择了 log 文件的记录方式后,testdisk会显示处于连接状态的分区设备。选择要恢复的分区设备,选择[Proceed]继续。见下图。
在列出的磁盘设备中,选择要恢复的分区,然后选择磁盘分区的种类。一般选择[Intel] Intel/PC partition即可。如果是 GPT 分区,应选择[EFI GPT]。对于ext4 文件系统来说应选择 [None ] Non partitioned media。但,通常选择 [Intel] Intel/PC partition 也可以正确识别,只是分析硬盘时间较长。见下图。
在接下来的的画面中选择[Analyse],对分区进行分析。见下图。
而后选择[Quick Search]进行快速检查。见下图。
选择[Continue]继续。
接下来会显示当前分区状态。这是testdisk分析的当前分区表的分区结果,我们选择可以[Deep Search]进行一次深入检测。
耐心等待检测完成。下图的20%表示检测进度。完成会提示[Continue]选项,选择继续。
检测完成界面如下图所示:
在此界面下,根据下方提示,按“P”按键,可列出分区上的文件。见下图。
下图,红色文件名称即为已被删除的文件,选择你要恢复的文件后,按“c”键。
testdisk会询问你要复制到哪个目录中去,选择你要保存的目标位置。
选好保存目标位置后,再次按“c”键。可看到如下绿色提示:Copy done!1 ok, 0 failed
可在设定的恢复文件存储目录下查看到恢复回来的文件。
按“q”键回退上一步,直至退出testdisk工具。
photorec的使用 photorec简介
photorec 是一款用于恢复硬盘、光盘中丢失的视频、文档、压缩包等文件,或从数码相机存储卡中恢复丢失图片的数据恢复软件(软件命名为 photo recovery的缩写)。photorec 忽略文件系统,能直接从介质底层恢复数据,因此,在介质的文件系统严重破坏或被重新格式化后,它也能进行数据恢复。出于安全考虑, photorec 以只读方式来访问您要恢复数据所在的磁盘或存储卡介质。
提示:一旦发现丢失或意外删除了某个图片、文件,请不要继续往该存储设备或磁盘保存新文件,否则您可能会覆盖原来的数据。这意味着在使用 photorec 时,千万不要将恢复的文件写入到原数据所存储的同一分区。
使用步骤
软件安装
photorec 无需格外安装,testdisk安装好后 photorec 可直接使用。
启动photorec #photorec 启动成功会显示当前已连接磁盘分区,选择准备恢复的文件所在分区,然后选择 [Proceed] 选项继续下一步。见下图。
接下来,选择欲恢复的文件所在磁盘分区格式。如FAT32。下图下方[File Opt]中有可供恢复的文件种类。
选择[File Opt]选项进入后可以看到photorec支持恢复的文件种类。默认是全部选中的,可以根据需要按“s”键取消全部勾选,然后移动光标到想要恢复的文件类型,使用“空格”键来选中指定类型。按“b”按键可以保存选择。如下图所示。
如没有特殊设置可以选择[Quit]选项退出,从上一级页面选择[Search]选项。进入如下页面。
选择好分区文件系统类型后,按Enter键进入如下页面。设定要分析的磁盘空间区域,可整个分区搜索[Whole],也可只搜索自由空间[Free]。如下图。
设定恢复成功后导出的文件存储目录位置。如:/home/itcast/my_recover。
存储目录选定好以后,按“Y”键即可进入数据恢复页面。开始数据恢复。如下图。
恢复完成后photorec会提示恢复的文件数,及存储位置。选择[Quit]退出 photorec。
被恢复的文件被保存在指定目录下,photorec会在其内部创建一个recup_dir.1目录,将恢复的文件保存在该目录下。
在recup_dir.1目录下,以字母数字组合为恢复文件重新命名。同时生成了一个report.xml文件。
对比
使用 testdisk 恢复文件,多用于硬盘上分区已经损坏的情形,该分区有原有数据纪录。但是如果损坏之后,重新再次做成了新分区的话,文件恢复的可能性比较小。
photorec 不仅针对硬盘、USB 设备、CD-ROM、SD 卡,而且还可以对其它存储设备进
行应用。因此大多数常用的文件如果被误操作的话,均可利用其来进行恢复。只不过它的初衷是针对照片而制作的,从该软件的命名可看出端倪。