chengqiang00 2019-07-01
背景:
发现app server在测试机经常CPU飙升到接近100%
strace发现大量的stat系统调用:
[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 ~]#分析:
1、业务代码并没有很多针对文件相关的操作。 2、看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
结果:
1、问题解决,没有大量的stat系统调用了; 2、CPU稳定在1%。