2

我只是想一一展示一些数据库的元素:

from twisted.web import server, resource
from twisted.internet import reactor
from pymongo import Connection
import time
import pprint


class ZenResource(resource.Resource):
    isLeaf = True

    connection = Connection('...', 27017)
    db = connection.data
    db.authenticate("...","...")
    iter = db.index.find()

    def render_GET(self, request):
        item = self.iter.next()
        # ... simple processing, skipped some simple strings manipulations:
        htmlLines = []
        for textLine in pprint.pformat(item).splitlines():
            htmlLines.append('<br/>%s' % textLine) 
        htmlText = '\n'.join(htmlLines)
        request.setHeader("Content-type", 'text/html; charset=UTF-8')
        return htmlText.encode("utf8")

reactor.listenTCP(48088, server.Site(ZenResource()))
reactor.run()

在一个系统上(Linux hh 3.0.0-16-generic-pae #28-Ubuntu SMP Fri Jan 27 19:24:01 UTC 2012 i686 i686 i386 GNU/Linux)一切正常。在另一个系统上(Linux localhost 2.6.38-8-server #42-Ubuntu SMP Mon Apr 11 03:49:04 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux)

我得到以下信息:

root@localhost:~# python zen.py  
Bus error

我认为两台服务器之间的唯一区别是(除了 x32 / x64 形式)是第二台服务器上有类似的扭曲过程。这个过程做一些重要的事情并且真的不想终止或以任何其他方式干扰它只是为了检查我的测试代码是否有效。

4

2 回答 2

3

在我最近的案例中,这与文件系统中启用(和超过)用户配额有关。我想当分区上没有可用空间时也可能发生这种情况。

于 2016-02-12T16:52:59.827 回答
2

试试memtest86+之类的工具,判断机器中的系统内存是否坏。似乎确实如此,并且正确存储或检索数据的随机失败会导致您的问题。

更一般地说,当您遇到此类问题时,您应该获取软件的调试版本(在本例中为 Python)并启用核心转储(请参阅 ulimit(1))。当您在此配置中重现崩溃时,您可以使用 gdb 检查核心转储以了解触发崩溃的代码。在内存模块损坏的情况下,崩溃通常发生在某个随机的、荒谬的地方,代码看起来都是正确的(但无论如何都会失败,因为违反了基本假设,即数据一旦计算并存储在内存中,就会保持不变,直到改变)。

但是,您可能会发现崩溃总是发生在代码的同一部分,您甚至可以发现错误。然后,修复错误并继续前进。:)

于 2012-02-18T14:48:02.927 回答