tcl脚本中止:无法重新分配xxx字节

时间:2014-05-12 15:39:13

标签: linux tcl realloc abort

我的Tcl脚本中止,说它无法重新分配2191392个字节。当脚本保持较长的执行持续时间(例如超过10小时)时会发生这种情况。我的Tcl脚本使用telnet和ssh连接连接到设备,并在设备上执行/验证某些命令输出。 Linux机器有足够的RAM 32GB,ulimit对于进程,数据,文件大小是无限的。我的脚本进程并没有消耗更多内存,但最糟糕的情况是< 1GB。我只是想知道为什么内存分配失败并且有足够的RAM。

1 个答案:

答案 0 :(得分:0)

该消息表明潜在的malloc()调用返回NULL(在不可恢复的位置),并且鉴于它不是非常多,这表明系统完全无法分配大量内存。取决于您的系统配置方式(32位与64位;检查parray tcl_platform打印出来的内容),这可能是一些事物的假象,但如果您认为它应该' t 使用超过1 GB的内存,这表明存在内存泄漏。

不幸的是,一般来说很难追逐内存泄漏。 Tcl的内置memory命令(在构建时通过configure --enable-symbols=mem启用)可以提供帮助,就像电子围栏这样的工具,但它们不完美,通常无法告诉您在哪里获取东西错了(因为你会找不到释放记忆的东西)。在Tcl级别,查看info globals列出的每个变量是否合理,或者是否有越来越多的全局变量。您需要使用string lengtharray existsarray sizearray names等工具。

由于另一个进程耗费了大量内存而导致操作系统开始感到高度受限,因此内存分配也可能失败。我希望你的情况不会发生这种情况,因为预防起来要困难得多。