我有一个相对简单的bash脚本,它从一组静态输入文件中读取,将输入存储在bash变量中,然后通过调用外部脚本对所述输入进行一堆处理(例如,用Python编写,Go,其他bash脚本等)并使用中间结果。
最近我遇到了一个间歇性的问题,即在处理过程中某个角色似乎在某处被改变,从而导致后续错误。具体地说,我正在进行的许多处理涉及切片逗号分隔记录的列表,并且每行上的一个值是unix时间戳,例如, 1354245000
。
似乎正在发生的事情是,偶尔会有一个这样的值稍微改变一下,所以我最终得到的时间戳如13542458=2
或13542458>2
或13542458;2
来自其中一个中间脚本。然后将其送入另一个脚本,该脚本在尝试将值解析为整数时抛出异常。
在这个问题的标题中,我建议这可能是潜在的CPU / RAM错误。我知道一般的愚蠢思维错误是由硬件/编译器等低级别的东西造成的,但是这个特殊错误的性质让我觉得它可能是有可能的,原因如下:
=
,>
,;
中非常接近等等)。也就是说,我猜两个字符之间相距很远的汉明距离也可以很小,也可以改为高阶位。我想知道的是,是否有任何有条不紊的方法来确认或排除此问题的硬件错误?或者,如果是硬件问题,操作系统可能无法检测到它吗?
有关机器的更多信息:
我希望有人可以指出我一个可靠的方法来验证硬件是否应该受到责备,或者说是否是其他可能原因的合理原因。
答案 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
来检查你的记忆。