【问题标题】:My bash script uses so much memory我的 bash 脚本占用了太多内存
【发布时间】:2013-03-23 07:01:03
【问题描述】:

我正在寻找哪个程序正在使用我的内存,泄漏在哪里?

而且,我创建了它,泄漏是在 bash 脚本中。

但是,这怎么可能呢? Bash 脚本总是会为每个变量赋值分配新空间?

我的 bash 脚本如下,请告诉我如何解决这个问题。

CONF="/conf/my.cfg"
HIGHRES="/data/high.dat"

getPeriod()
{
meas=`head -n 1 $CONF`
statperiod=`echo $meas`
}

(while true
do
        lastline=`tail -n 1 $HIGHRES |cut -d"," -f2`
        linenumber=`grep -n $lastline $HIGHRES | cut -f1 -d:`
        /bin/stat $linenumber
        getPeriod
        sleep $statperiod
done)

编辑#1: high.dat的最后一行

2013-02-11,10:59:13,1,0,0,0,0,0,0,0,0,12.340000,0.330000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24.730000,24.709990,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

【问题讨论】:

  • 你在哪里设置 $lastline?
  • 你能举例说明high.dat中的内容吗?

标签: linux bash memory-leaks


【解决方案1】:

我无法使用该脚本的近似值来验证内存泄漏,因此泄漏实际上可能不是您认为的位置。考虑使用更多信息更新您的问题,包括完整的工作示例以及您为找出内存泄漏所做的工作。

也就是说,您选择了一种非常奇怪的方法来找出文件有多少行。最常用的方法是使用标准的wc 工具:

$ wc -l < test.txt
      19
$

注意:使用&lt; file 而不是传递文件名,因为后者会导致文件名被写入标准输出,然后您必须将其编辑掉:

$ wc -l test.txt
      19 test.txt
$

【讨论】:

    猜你喜欢
    • 2022-08-11
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-14
    • 1970-01-01
    • 2013-08-02
    相关资源
    最近更新 更多