記一次Django reload致使 CPU飆升+大量stat系統調用的解決方案

背景:python

發現app server在測試機常常CPU飆升到接近100%

strace發現大量的stat系統調用:django

[root@app02 ~]#  strace -p 2205 -C
...
stat("/home/ouyang/storyapi/xb_handlers/support/system/get_pop_ups_handler.py", {st_mode=S_IFREG|0644, st_size=4094, ...}) = 0
stat("/home/ouyang/storyapi/xb_dao/support/share/base/user_share_newpull_dao.py", {st_mode=S_IFREG|0644, st_size=3695, ...}) = 0
stat("/usr/lib/python2.7/site-packages/urllib3/exceptions.py", {st_mode=S_IFREG|0644, st_size=6603, ...}) = 0
stat("/home/ouyang/storyapi/xb_dao/pay/comic/record/__init__.py", {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
stat("/usr/lib/python2.7/site-packages/urllib3/packages/__init__.py", ^Cstrace: Process 6134 detached
 <detached ...>
% time     seconds  usecs/call     calls    errors syscall
  ---- ----------- ----------- --------- --------- ----------------
▽96.53   20.122361       17332      1161       252 futex
  2.95    0.614242           2    328764       477 stat
  0.35    0.073086         163       448           read
  0.06    0.013246         166        80           select
  0.04    0.008513           5      1721      1388 open
  0.02    0.004120           2      1780           getdents
  0.01    0.002841           5       531           fstat
  0.01    0.002252           3       890           openat
  0.01    0.001959           2      1226           close
  0.01    0.001300           1       883           lstat
  0.01    0.001283           7       174           munmap
  0.00    0.000485           3       191           mmap
  0.00    0.000161           3        51           lseek
  0.00    0.000080           2        34           brk
  0.00    0.000039          39         1           clone
  0.00    0.000014           3         5           mprotect
  0.00    0.000005           1         5         5 ioctl
  0.00    0.000000           0         6         6 access
  0.00    0.000000           0        12           fcntl
------ ----------- ----------- --------- --------- ----------------
100.00   20.845987                337963      2128 total
[root@app02 ~]#

分析:api

一、業務代碼並無不少針對文件相關的操做。
二、看stat系統調用各個代碼文件都有涉及到,懷疑是django的reload模塊致使。

嘗試:啓動服務器時增長--noreload選項服務器

[root@app02 ~]#    cat /etc/supervisord.d/app.ini 
[program:app]
user=root
environment= PATH="/usr/bin"
directory=/home/ouyang/storyapi
command=python manage.py runserver 0.0.0.0:8002 --nothreading --noreload
redirect_stderr=true
stdout_logfile=/home/ouyang/storyapi/log/super.log
stderr_logfile=/home/ouyang/storyapi/log/super.err
startsecs=1
stopwaitsecs=1
stopasgroup=true

結果:app

一、問題解決,沒有大量的stat系統調用了;
二、CPU穩定在1%。
相關文章
相關標籤/搜索