Skip to main content
 首页 » 编程设计

python之Django 服务器 100% cpu 无明显原因

2024年08月30日31grandyang

这是一个使用 Python 2.6.6 和 Django 1.2.3 在 Linux(我认为是 CentOS)上运行的服务器。

运行 django 的 python 进程突然开始使用 100% cpu,直到它重新启动。这种情况最近只发生过两次,并且不到一个月前才开始这样做。在大约 7 个月的时间里,我没有对代码进行任何大的更改。

查看控制台的输出,它没有受到任何极端使用。在我相信它开始使用 100% cpu 之前的大约 10 分钟内只有大约 10 个查询。打印的唯一错误是管道损坏错误,我认为这可能是有人在它变慢并关闭连接后使用它。

我重新运行了它变慢时的所有查询,它们都运行良好,没有任何问题。

从某种意义上说,服务器本身仍在运行,但速度非常慢。我有一系列测试,我每天都运行这些测试,它们通常需要大约 7 分钟,但如果速度这么慢,可能需要 2-3 小时。

如果有人有任何想法,我将不胜感激。

此外,您可能会注意到,如果有人可以推荐有关如何监控此类事件的良好做法,那么我在这些问题上还是个新手。

感谢您的宝贵时间!

下面是我提到的输出,它启动 100% cpu 的时间是下午 4 点

[23/Jul/2012 15:49:55] "GET /CFXsearch/?n=&v=all&e=2012Week30&c=all&r=all&p=all&run=all&pl=all&m=all&o=all&d1=&d2=&submitOption=comparing&compareBy=plat&sort=sortName&Soft=CFX HTTP/1.1" 200 67228 
[23/Jul/2012 15:50:00] "GET /CFXsearch/?n=&v=all&e=2012Week30&c=all&r=all&p=all&run=all&pl=RH5&m=all&o=all&d1=&d2=&submitOption=comparing&compareBy=plat&sort=sortName&Soft=CFX HTTP/1.1" 200 33346 
[23/Jul/2012 15:50:05] "GET /CFXsearch/?n=&v=all&e=2012Week30&c=all&r=all&p=all&run=all&pl=SLES10&m=all&o=all&d1=&d2=&submitOption=comparing&compareBy=plat&sort=sortName&Soft=CFX HTTP/1.1" 200 33394 
[23/Jul/2012 15:54:48] "GET /CFXsearch/?n=&v=all&e=2012Week30&c=all&r=all&p=all&run=all&pl=SLES11&m=all&o=all&d1=&d2=&submitOption=comparing&compareBy=plat&sort=sortName&Soft=CFX HTTP/1.1" 200 33394 
[23/Jul/2012 15:54:53] "GET /results/?n=&e=2012Week30&c=TGTest&pl=SLES11&p=single&p=defined&p=double&run=default&run=hpmpi&run=mpich&run=mpich2&run=Platform&run=pvm%20parallel&run=serial&sort=sortResult&d=&y=&submitOption=latestsearch&Soft=CFX HTTP/1.1" 200 19350 
[23/Jul/2012 15:54:57] "GET /results/?n=&e=2012Week30&c=turboexamples&pl=SLES11&p=single&p=defined&p=double&run=default&run=hpmpi&run=mpich&run=mpich2&run=Platform&run=pvm%20parallel&run=serial&sort=sortResult&d=&y=&submitOption=latestsearch&Soft=CFX HTTP/1.1" 200 36729 
[23/Jul/2012 15:59:40] "GET / HTTP/1.1" 200 11111 
[23/Jul/2012 15:59:40] "GET /site_media/style.css HTTP/1.1" 304 0 
[23/Jul/2012 15:59:45] "GET /CFXsearch/ HTTP/1.1" 200 25637 
[23/Jul/2012 15:59:45] "GET /site_media/jquery-1.2.6.min.js HTTP/1.1" 304 0 
[23/Jul/2012 15:59:45] "GET /site_media/sorttable.js HTTP/1.1" 304 0 
[23/Jul/2012 16:00:04] "GET /CFXsearch/?n=&v=14.5&e=all&c=solver54&r=all&p=all&run=all&pl=all&m=all&o=all&d1=&d2=&submitOption=comparing&compareBy=plat&sort=sortName&Soft=CFX HTTP/1.1" 200 402737 
[23/Jul/2012 16:00:19] "GET /results/?n=&e=2012Week29&c=solver54&pl=SLES11&p=single&p=defined&p=double&run=default&run=hpmpi&run=mpich&run=mpich2&run=Platform&run=pvm%20parallel&run=serial&sort=sortResult&d=&y=&submitOption=latestsearch&Soft=CFX HTTP/1.1" 200 1557488 
[23/Jul/2012 16:02:48] "GET /CFXsearch/?n=&v=14.5&e=all&c=solver54&r=all&p=all&run=all&pl=all&m=all&o=all&d1=&d2=&submitOption=comparing&compareBy=ex&sort=sortName&Soft=CFX HTTP/1.1" 200 408388 
[23/Jul/2012 16:03:01] "GET /CFXsearch/?n=&v=14.5&e=all&c=solver54&r=all&p=all&run=all&pl=all&m=all&o=all&d1=&d2=&submitOption=comparing&compareBy=plat&sort=sortName&Soft=CFX HTTP/1.1" 200 402737 
Traceback (most recent call last): 
  File "/home/install2/testingDatabase/lib/python2.6/site-packages/django/core/servers/basehttp.py", line 281, in run 
    self.finish_response() 
  File "/home/install2/testingDatabase/lib/python2.6/site-packages/django/core/servers/basehttp.py", line 321, in finish_response 
    self.write(data) 
  File "/home/install2/testingDatabase/lib/python2.6/site-packages/django/core/servers/basehttp.py", line 400, in write 
    self.send_headers() 
  File "/home/install2/testingDatabase/lib/python2.6/site-packages/django/core/servers/basehttp.py", line 465, in send_headers 
    self._write(str(self.headers)) 
  File "/home/install2/testingDatabase/Python-2.6.6/Lib/socket.py", line 318, in write 
    self.flush() 
  File "/home/install2/testingDatabase/Python-2.6.6/Lib/socket.py", line 297, in flush 
    self._sock.sendall(buffer(data, write_offset, buffer_size)) 
error: [Errno 32] Broken pipe 
Traceback (most recent call last): 
  File "/home/install2/testingDatabase/Python-2.6.6/Lib/SocketServer.py", line 560, in process_request_thread 
    self.finish_request(request, client_address) 
  File "/home/install2/testingDatabase/Python-2.6.6/Lib/SocketServer.py", line 322, in finish_request 
    self.RequestHandlerClass(request, client_address, self) 
  File "/home/install2/testingDatabase/lib/python2.6/site-packages/django/core/servers/basehttp.py", line 562, in __init__ 
    BaseHTTPRequestHandler.__init__(self, *args, **kwargs) 
  File "/home/install2/testingDatabase/Python-2.6.6/Lib/SocketServer.py", line 618, in __init__ 
    self.finish() 
  File "/home/install2/testingDatabase/Python-2.6.6/Lib/SocketServer.py", line 661, in finish 
    self.wfile.flush() 
  File "/home/install2/testingDatabase/Python-2.6.6/Lib/socket.py", line 297, in flush 
    self._sock.sendall(buffer(data, write_offset, buffer_size)) 
error: [Errno 32] Broken pipe 
[23/Jul/2012 16:09:59] "GET /PolyflowSummary/ HTTP/1.1" 200 7561 
[23/Jul/2012 16:17:42] "GET /?soft=CFX HTTP/1.1" 200 11112 
[23/Jul/2012 16:17:44] "GET /?soft=CFX HTTP/1.1" 200 11112 
[23/Jul/2012 16:18:06] "GET /site_media/style.css HTTP/1.1" 200 432 
[23/Jul/2012 16:18:23] "GET /site_media/style.css HTTP/1.1" 200 432 
[23/Jul/2012 16:18:23] "GET /site_media/favicon.ico HTTP/1.1" 200 1718 

请您参考如下方法:

您可以连接到进程并附加调试器。我以前做过这个,它非常有用。 my full notes are here , 但缩略版是:

  • 安装 this以便 gdb“理解”python

  • 使用 gdb -p PID 连接(PID 来自 ps 或类似的)

  • 在 gdb 中生成一个堆栈跟踪,您将确切地看到您在哪里消耗了 CPU。

原始信用 - Showing the stack trace from a running Python application (事实上​​ ,在输入所有这些之后,也许这是一个链接问题的骗局?我想这个问题是不同的,即使答案是相同的......)