一次docker中的nginx进程响应慢问题定位记录
有个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进程响应慢问题定位记录相关推荐
- 滚动 docker 中的 nginx 日志
Nginx 自己没有处理日志的滚动问题,它把这个球踢给了使用者.一般情况下,你可以使用 logrotate 工具来完成这个任务,或者如果你愿意,你可以写各式各样的脚本完成同样的任务.本文笔者介绍如何滚 ...
- 运行中的Nginx进程间的关系
第2章 Nginx的配置 Nginx拥有大量官方发布的模块和第三方模块,这些已有的模块可以帮助我们实现Web服务器上很多的功能.使用这些模块时,仅仅需要增加.修改一些配置项即可.因此,本章的目的是熟悉 ...
- 给Docker中的Nginx搭建HTTPS环境
随着苹果和微信小程序强制使用HTTPS协议传输,越来越多的公司和企业开始使用HTTPS.下面我来分享下给Docker容器中的Nginx搭建HTTPS环境 什么是HTTPS 超文本传输安全协议(英语:H ...
- Nginx版本升级以及Docker中的Nginx版本升级
背景: 经安全检测,当前版本的nginx有风险,需要升级到最新版本的nginx,于是进行了原生的nginx版本升级和docker中的nginx版本进行升级 一.原生Nginx版本升级 直接安装到服务器 ...
- ajax nginx 转发 sessionid_Nginx:初识Nginx(概念、在Docker中安装Nginx、常用命令、配置文件) - 怀梦想,致远方...
1.Nginx初识 (1)概念 Nginx是一个高性能的HTTP和反向代理服务器,特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好 Nginx可以作为静态页面 ...
- 【全】Docker(二)-在Docker中部署Nginx实现负载均衡视频教程
一.前言 在前面的文章中我们已经介绍了如何在Centos7系统中安装Docker以及利用Docker进行Asp.Net Core应用的部署.在本文中,我们将继续介绍利用Docker部署Nginx服务实 ...
- Docker(二)-在Docker中部署Nginx实现负载均衡【完整教程】
一.前言 [查看完整视频教程(免费),请拉直文尾] 在前面的文章中我们已经介绍了如何在Centos7系统中安装Docker以及利用Docker进行Asp.Net Core应用的部署.在本文中,我们将继 ...
- Docker中的Nginx搭建HTTPS环境
准备 1.已安装好docker环境 2.申请好域名 3.SSL证书(可选) 一.安装Nginx docker pull nginx 查看docker镜像: docker images 二.进行配置 建 ...
- Docker中创建nginx容器出现docker: Error response from daemon: driver failed programming exter...解决
使用nginx.conf配置文件创建nginx容器时出现: 解决: 根据出现的错误查找相应端口进程 netstat -apn | grep 80 找到后杀死进程 kill -9 954 重新启动Doc ...
最新文章
- Adaboost算法原理分析与实例
- C++标准库之String
- 在JSP中动态生成随机验证码,登录时后台校验验证码,以及如何避免同一个验证码被重复提交爆破密码...
- 寒冬已至?四面楚歌的 Android 工程师该何去何从?
- Microsoft SQL Server Protocols
- 58移动开发 App 工厂
- 测试版降级后软件还在么,2分钟告诉你如何将iOS测试版降级到正式版本
- 恩山斐讯论坛k2p_K2P A1 A2 路由器刷机教程 最详细教程,适合新手!
- 110KV/35KV/10KV富源变电站一次系统设计
- windows10禁用UAC
- linux常用网络命令笔记
- CSS 实现圆角梯形
- SKYPE的BUG 7/8
- 【关于3D-R2N2的配置和使用】
- iOS 权限提示语国际化
- [re]符号执行一把梭:2020网鼎杯青龙组re_signal_wp
- Docker 安装 SRS
- 根据xml配置地图服务
- Java DES 加密解密
- Stanford Named Entity Recognizer (NER) 斯坦福命名实体识别(NER)