AIX 5L 上的共享库内存占用
2008-11-10 08:28:28 来源:WEB开发网在启动第二个实例之前,我们将看到内存占用恢复正常了(我改用进程 boe_fcprocd,因为在这项 LIBPATH 测试中无法启动 WIReportServer)。
$ ps -e -o pid,vsz,user,comm | grep boe_fcprocd
29432 65036 jbrown boe_fcprocd
35910 67596 jbrown boe_fcprocd
39326 82488 sj1xir2a boe_fcprocd
53470 64964 sj1xir2a boe_fcprocd
我们看到 procmap 显示文件按预期从 ~jbrown 加载:
53470 : /crystal/sj1xir2a/xir2_r/bobje/enterprise115/aix_rs6000/boe_fcprocd
-name vanpg
10000000 10907K read/exec boe_fcprocd
3000079c 1399K read/write boe_fcprocd
d42c9000 1098K read/exec
/home7/jbrown/vanpgaix40/bobje/enterprise115/aix_rs6000/libcrypto.so
33e34160 167K read/write
/home7/jbrown/vanpgaix40/bobje/enterprise115/aix_rs6000/libcrypto.so
33acc000 3133K read/exec
/home7/jbrown/vanpgaix40/bobje/enterprise115/aix_rs6000/libcpi18nloc.so
33ddc697 349K read/write
/home7/jbrown/vanpgaix40/bobje/enterprise115/aix_rs6000/libcpi18nloc.so
清理工作
关闭应用程序后,共享库可能仍然驻留在共享段 0xd 中。在这种情况下,您可以使用实用工具“slibclean”卸载不再引用的任何共享库。该实用工具不需要参数:
slibclean
还可以使用实用工具 genld,在传递 -l 选项时,该工具可以显示类似于 procmap 的结果,但它会显示系统中的所有现有进程:
genld -l
有时,在运行 slibclean 后,您可能仍然无法复制共享库。例如:
$ cp /build/dev/bin/release/libc3_calc.so /runtime/app/lib/
cp: /runtime/app/lib/libc3_calc.so: Text file busy
您可能已经运行了 slibclean,并且运行“genld –l”时未显示任何进程加载了该库。但是系统仍然在保护该文件。您可以通过以下方法解除此限制:首先删除目标位置的共享库,然后复制新的共享库:
$ rm /runtime/app/lib/libc3_calc.so
$ cp /build/dev/bin/release/libc3_calc.so /runtime/app/lib/
在开发共享库时,如果您要执行重复的编译、链接、执行和测试练习,您可以通过将共享库设置为只有所有者才能执行(例如,r_xr__r__)来避免在每个周期中运行 slibclean 的麻烦。这将导致您用于测试的进程单独地加载和映射您的共享库。但是,请确保让所有人都可以执行它(例如,产品发布时设为 r_xr_xr_x)。
总结
我希望您能够更详细地了解共享库占用内存的方式以及可用于检测它们的实用工具。这样您就能更好地评估应用程序的规模需求,并分析在 AIX 系统中运行的进程的内存占用构成情况。
更多精彩
赞助商链接