我们提供了一个与多个后端Web服务集成的樱桃服务。在负载测试期间,樱桃过程会在一段时间(45分钟)后定期崩溃。我们知道瓶颈是我们正在使用的后端Web服务。在崩溃之前,我们在访问后端服务时会看到500和503错误,但我无法理解为什么cherrypy本身会崩溃(整个过程被杀死)。你能告诉我如何调查问题所在吗? thread_poll(50)是否可能排队太多请求?
答案 0 :(得分:0)
在我早期的CherryPy时代,我曾经崩溃过一次。我的意思是由 segfault 引起的Python进程崩溃。当我调查它时,我发现我搞乱了MySQLdb连接,将它们缓存在可以互换的CherryPy线程访问的对象中。因为MySQLdb连接不是线程安全的,所以它只能从创建的线程中访问。另外由于并发性,崩溃似乎不确定,只出现在负载测试中。因此,负载测试可以作为调试工具使用 - 尝试Apache JMeter或Locust(Pythonic)。
当进程崩溃时,您可以指示Linux编写一个具有堆栈跟踪的核心转储(例如,在我的示例中,在MySQLdb C代码端)。然而,对你来说(对我而言)外来的低级C环境,堆栈跟踪可以帮助找到导致崩溃的库或者至少缩小一圈嫌疑人。这是an article about it。
另外我想要注意CherryPy中不太可能出现的问题。它实际上非常稳定。