有个ft测试的环境,其中nginx使用docker发布的。测试用例是curl的时候,没有获得nginx的响应。

docker ps
CONTAINER ID        IMAGE                                                                  COMMAND                  CREATED             STATUS              PORTS                                                                                         NAMES
e39be26bc976        cdn-release-docker.artnj.zte.com.cn/img-for-ottci/python:latest        "/bin/bash -c /home/s"   12 minutes ago      Up 12 minutes       22/tcp, 9220/tcp                                                                              RF_THUMBNAIL
a7f8ff2c2fac        ft_thumbnail:V5.01.01.01                                               "/usr/sbin/init"         12 minutes ago      Up 12 minutes                                                                                                     FT_thumbnail
4881975f8e10        cdn-release-docker.artnj.zte.com.cn/img-for-ottci/python:latest        "/bin/bash -c /home/s"   31 minutes ago      Up 31 minutes       22/tcp, 9220/tcp                                                                              RF_filepackager
bfdc3beaf7e4        ft_filepackager:V5.01.01.01                                            "/usr/sbin/init bash"    31 minutes ago      Up 31 minutes

 进入容器,看一下具体信息:

docker exec -it bfdc3beaf7e4 bash

  敲一下top命令,可以发现多个nginx的work进程的cpu很高。

bash-4.2# top
TERM environment variable not set.
bash-4.2#
bash-4.2# echo TERM
TERM
bash-4.2# echo $TERM
dumb
bash-4.2# export M
bash-4.2# export TERM=dumb
bash-4.2# top
top - 09:28:13 up 81 days,  7:01,  0 users,  load average: 17.46, 44.24, 34.20
Tasks:  49 total,   2 running,  47 sleeping,   0 stopped,   0 zombie
%Cpu(s):  2.2 us,  4.4 sy,  0.0 ni, 93.4 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 26321361+total, 48650644 free, 24579464 used, 18998350+buff/cache
KiB Swap:        0 total,        0 free,        0 used. 23644137+avail MemPID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND1435 root      20   0 9855.0m  44528   3236 R  93.3  0.0  24:27.53 nginx

bash-4.2# strace -p 1435
bash: strace: command not found

  

由于并没有将strace命令一起打包到这个镜像中,所以需要在容器外和容器内的进程对应起来。然后查看对应的进程信息:

[root@localhost ~]# docker top bfdc3beaf7e4 |grep -i nginx
root                26807               22109               0                   17:33               ?                   00:00:00            wget -T 10 -t 1 -O /home/zxcdn/agent/plugin/stat/../../crontab/nginxstatus.tmp http://127.0.0.1:6620/NGINXSTATUS
root                30753               16121               0                   16:53               ?                   00:00:00            nginx: master process /home/zxcdn/ottcache/nginx/sbin/nginx -p /home/zxcdn/ottcache/nginx
root                30754               30753               72                  16:53               ?                   00:29:28            nginx: worker process

  有很多nginx的work进程,而且进程名相同,只截取部分。nginx开启的work进程是64个,所以有一大片。那怎么对应呢?有个小技巧,就是在容器里运行ps -ef |grep -i nginx |grep -i worker,然后对应的顺序,在容器外和docker top |grep -i nginx |grep -i worker是一致的。

在容器外找到对应的cpu高的进程滞后,先看一下这个进程是用户态cpu高还是内核态cpu高,可以使用

pidstat -p 30754 1 来确定,然后本文刚好是内核态cpu高,则可以使用strace 来看为什么该进程cpu高了。本文是因为对应的lua代码的覆盖率的频率设置太低,而且lua脚本有个地方触发了循环,导致了频繁操作read和write。

open("/home/devops/luacov/luacov.stats.out", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 18
fstat(18, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f5178ddc000
write(18, "398:/home/zxcdn/ottcac 0 0 0 0 0"..., 4096) = 4096
write(18, " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"..., 4096) = 4096
write(18, "0 0 0 0 0 0 0 0 0 0 0 0 3 3 0 0 "..., 4096) = 4096
write(18, " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"..., 4096) = 4096
write(18, "1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "..., 4096) = 4096
write(18, "0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 "..., 4096) = 4096
write(18, "28 0 0 0 0 0 114 114 114 0 114 0"..., 4096) = 4096
write(18, "0 0 0 0 0 0 0 0 0 0 0 0 889 0 0 "..., 4096) = 4096
write(18, " 0 0 0 0 0 0 0 0 0 0 480 0 0 480"..., 4096) = 4096
write(18, " 0 0 0 0 354 354 0 0 0 0 0 0 0 0"..., 4096) = 4096
write(18, "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "..., 204) = 204
close(18)                               = 0
munmap(0x7f5178ddc000, 4096)            = 0
close(20)                               = 0
close(22)                               = 0
open("/home/devops/luacov/luacov.stats.out", O_RDONLY) = 18
fstat(18, {st_mode=S_IFREG|0644, st_size=41164, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f5178ddc000
read(18, "398:/home/zxcdn/ottcac 0 0 0 0 0"..., 4096) = 4096
read(18, " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"..., 4096) = 4096
read(18, "0 0 0 0 0 0 0 0 0 0 0 0 3 3 0 0 "..., 4096) = 4096
read(18, " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"..., 4096) = 4096
read(18, "1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "..., 4096) = 4096
read(18, "0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 "..., 4096) = 4096
read(18, "28 0 0 0 0 0 114 114 114 0 114 0"..., 4096) = 4096
read(18, "0 0 0 0 0 0 0 0 0 0 0 0 889 0 0 "..., 4096) = 4096
read(18, " 0 0 0 0 0 0 0 0 0 0 480 0 0 480"..., 4096) = 4096
read(18, " 0 0 0 0 354 354 0 0 0 0 0 0 0 0"..., 4096) = 4096
read(18, "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "..., 4096) = 204

  

转载于:https://www.cnblogs.com/10087622blog/p/9361862.html

一次docker中的nginx进程响应慢问题定位记录相关推荐

  1. 滚动 docker 中的 nginx 日志

    Nginx 自己没有处理日志的滚动问题,它把这个球踢给了使用者.一般情况下,你可以使用 logrotate 工具来完成这个任务,或者如果你愿意,你可以写各式各样的脚本完成同样的任务.本文笔者介绍如何滚 ...

  2. 运行中的Nginx进程间的关系

    第2章 Nginx的配置 Nginx拥有大量官方发布的模块和第三方模块,这些已有的模块可以帮助我们实现Web服务器上很多的功能.使用这些模块时,仅仅需要增加.修改一些配置项即可.因此,本章的目的是熟悉 ...

  3. 给Docker中的Nginx搭建HTTPS环境

    随着苹果和微信小程序强制使用HTTPS协议传输,越来越多的公司和企业开始使用HTTPS.下面我来分享下给Docker容器中的Nginx搭建HTTPS环境 什么是HTTPS 超文本传输安全协议(英语:H ...

  4. Nginx版本升级以及Docker中的Nginx版本升级

    背景: 经安全检测,当前版本的nginx有风险,需要升级到最新版本的nginx,于是进行了原生的nginx版本升级和docker中的nginx版本进行升级 一.原生Nginx版本升级 直接安装到服务器 ...

  5. ajax nginx 转发 sessionid_Nginx:初识Nginx(概念、在Docker中安装Nginx、常用命令、配置文件) - 怀梦想,致远方...

    1.Nginx初识 (1)概念 Nginx是一个高性能的HTTP和反向代理服务器,特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好 Nginx可以作为静态页面 ...

  6. 【全】Docker(二)-在Docker中部署Nginx实现负载均衡视频教程

    一.前言 在前面的文章中我们已经介绍了如何在Centos7系统中安装Docker以及利用Docker进行Asp.Net Core应用的部署.在本文中,我们将继续介绍利用Docker部署Nginx服务实 ...

  7. Docker(二)-在Docker中部署Nginx实现负载均衡【完整教程】

    一.前言 [查看完整视频教程(免费),请拉直文尾] 在前面的文章中我们已经介绍了如何在Centos7系统中安装Docker以及利用Docker进行Asp.Net Core应用的部署.在本文中,我们将继 ...

  8. Docker中的Nginx搭建HTTPS环境

    准备 1.已安装好docker环境 2.申请好域名 3.SSL证书(可选) 一.安装Nginx docker pull nginx 查看docker镜像: docker images 二.进行配置 建 ...

  9. Docker中创建nginx容器出现docker: Error response from daemon: driver failed programming exter...解决

    使用nginx.conf配置文件创建nginx容器时出现: 解决: 根据出现的错误查找相应端口进程 netstat -apn | grep 80 找到后杀死进程 kill -9 954 重新启动Doc ...

最新文章

  1. Adaboost算法原理分析与实例
  2. C++标准库之String
  3. 在JSP中动态生成随机验证码,登录时后台校验验证码,以及如何避免同一个验证码被重复提交爆破密码...
  4. 寒冬已至?四面楚歌的 Android 工程师该何去何从?
  5. Microsoft SQL Server Protocols
  6. 58移动开发 App 工厂
  7. 测试版降级后软件还在么,2分钟告诉你如何将iOS测试版降级到正式版本
  8. 恩山斐讯论坛k2p_K2P A1 A2 路由器刷机教程 最详细教程,适合新手!
  9. 110KV/35KV/10KV富源变电站一次系统设计
  10. windows10禁用UAC
  11. linux常用网络命令笔记
  12. CSS 实现圆角梯形
  13. SKYPE的BUG 7/8
  14. 【关于3D-R2N2的配置和使用】
  15. iOS 权限提示语国际化
  16. [re]符号执行一把梭:2020网鼎杯青龙组re_signal_wp
  17. Docker 安装 SRS
  18. 根据xml配置地图服务
  19. Java DES 加密解密
  20. Stanford Named Entity Recognizer (NER) 斯坦福命名实体识别(NER)

热门文章

  1. pyspark注意事项
  2. LKT系列加密芯片如何预置openssl生成的rsa密钥完成运算(三)
  3. 西洋的AI作曲家,发布了一张中国风音乐专辑
  4. 无人机可能又闯祸了:这次导致美国一架直升机坠毁
  5. PyTorch发布一周年:盘点社区和工程大事件,后来者居上态势已显?
  6. Rokid祝明铭:大腿我们不抱,人机交互产品形态未定 | 变局者
  7. 超火的漫画线稿上色AI出新版了!无监督训练,效果更美好 | 代码+Demo
  8. 一场谷歌与苹果的合作:TensorFlow Lite开始支持Core ML
  9. Postgresql的一些命令
  10. 如何防范电改下分布式光伏的风险