如何在Linux上的Bash脚本中调试潜在的CPU / RAM错误

时间:2014-07-02 07:32:12

标签: bash shell hardware cpu

我有一个相对简单的bash脚本,它从一组静态输入文件中读取,将输入存储在bash变量中,然后通过调用外部脚本对所述输入进行一堆处理(例如,用Python编写,Go,其他bash脚本等)并使用中间结果。

最近我遇到了一个间歇性的问题,即在处理过程中某个角色似乎在某处被改变,从而导致后续错误。具体地说,我正在进行的许多处理涉及切片逗号分隔记录的列表,并且每行上的一个值是unix时间戳,例如, 1354245000

似乎正在发生的事情是,偶尔会有一个这样的值稍微改变一下,所以我最终得到的时间戳如13542458=213542458>213542458;2来自其中一个中间脚本。然后将其送入另一个脚本,该脚本在尝试将值解析为整数时抛出异常。

在这个问题的标题中,我建议这可能是潜在的CPU / RAM错误。我知道一般的愚蠢思维错误是由硬件/编译器等低级别的东西造成的,但是这个特殊错误的性质让我觉得它可能是有可能的,原因如下:

  1. 每次调用脚本时输入文件都是相同的,脚本只在某些调用时失败。
  2. 在脚本断开之前,我无法想到源代码中的任何随机源。它基本上只是切片和切割csv输入。
  3. 我无法想到源代码中的任何并发源 - 即使Go脚本实际上并没有同时运行任何内容。
  4. 这个问题只出现在上周左右。在此之前,此错误永远不会发生。
  5. 虽然我没有记录每个错误字符,但它们似乎经常在ASCII table到数值(=>;中非常接近等等)。也就是说,我猜两个字符之间相距很远的汉明距离也可以很小,也可以改为高阶位。
  6. 在不同的运行中,脚本经常会在不同的阶段中断。即我有许多单独的Python脚本,有时它会使它超过一个脚本,然后错误将在另一个脚本中引发。其他时候它会在早期的剧本中被诱导。
  7. 我想知道的是,是否有任何有条不紊的方法来确认或排除此问题的硬件错误?或者,如果是硬件问题,操作系统可能无法检测到它吗?

    有关机器的更多信息:

    • Linux 64位,Ubuntu 12.04
    • Intel i7处理器
    • 16GB DDR3内存

    我希望有人可以指出我一个可靠的方法来验证硬件是否应该受到责备,或者说是否是其他可能原因的合理原因。

2 个答案:

答案 0 :(得分:1)

虽然它不太可能是硬件,但如果你已经用尽了@OliCharlesworth建议的标准软件调试,这里是硬件错误调查的概述:

(1) check your log area for any `MCE` logs (machine check exceptions). 
    If you find any in either your log area (syslog) or sometimes in
    the present working dir or /dir -- you have a hardware failure.

(2) check your log area for disk errors. e.g: 
    smartd[3963]: Device: /dev/sda [SAT], 34 Currently unreadable (pending) sectors

(3) check your drive integrity, e.g.: (as root) # `smartctl -a /dev/sda` if any abnormality, run:
    smartctl -t short /dev/sda (change drive as required)

(4)  download/install/boot to [memtest86](http://www.memtest86.com/download.htm)
     (run the complete test)

如果你的cpu /主板没有抛出mce,你没有磁盘错误,你的驱动器使用smartctl测试正常,你没有memtest86的内存错误,然后重新检查软件调试。虽然仍然存在额外的硬件错误(坏电容等),但此时的可能性是软件。祝你好运。

答案 1 :(得分:1)

尝试启动Memtest来检查你的记忆。