记一次容器内执行ansible命令卡住

2023-05-16

1.由来

  最近在使用kylin_v10系统,发现当在此系统下运行的容器内执行#ansible localhost -m setup 命令会卡住不动,于是和同事一起经过如下排查最终找到解决问题的办法。

2.环境

2.1.系统信息

# cat /etc/*-release
Kylin Linux Advanced Server release V10 (Tercel)
NAME="Kylin Linux Advanced Server"
VERSION="V10 (Tercel)"
ID="kylin"
VERSION_ID="V10"
PRETTY_NAME="Kylin Linux Advanced Server V10 (Tercel)"
ANSI_COLOR="0;31"

Kylin Linux Advanced Server release V10 (Tercel)  

2.2.内核信息

# uname -a
Linux  4.19.90-17.ky10.aarch64 #1 SMP Sun Jun 28 14:27:40 CST 2020 aarch64 aarch64 aarch64 GNU/Linux

2.3. docker信息

# docker info
Containers: 1
 Running: 1
 Paused: 0
 Stopped: 0
Images: 1
Server Version: 18.09.9
Storage Driver: overlay2
 Backing Filesystem: xfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs

2.4.ansible信息

# ansible --version
ansible 2.6.2
  config file = None
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.16 (default, Jul  9 2020, 06:35:45) [GCC 7.3.0]

3.分析排查

  在排查时候发现#ansible localhost -m setup命令卡住,放将localhost换成自定义ip+账号密码的配置文件即可正常运行。

       于是加入export ANSIBLE_DEBUG=True用于输出debug日志。

       发现卡在如下地方:

    82 1606185861.10586: transferring module to remote /root/.ansible/tmp/ansible-tmp-1606185860.41-269842916667107/AnsiballZ_setup.py
    82 1606185861.10840: done transferring module to remote
    82 1606185861.10894: _low_level_execute_command(): starting
    82 1606185861.10924: _low_level_execute_command(): executing: /bin/sh -c 'chmod u+x /root/.ansible/tmp/ansible-tmp-1606185860.41-269842916667107/ /root/.ansible/tmp/ansible-tmp-1606185860.41-269842916667107/AnsiballZ_setup.py && sleep 0'
    82 1606185861.10940: in local.exec_command()
    82 1606185861.10957: opening command with Popen()
    82 1606185861.11488: done running command with Popen()
    82 1606185861.11523: getting output with communicate()
    82 1606185861.11918: done communicating
    82 1606185861.11936: done with local.exec_command()
    82 1606185861.11961: _low_level_execute_command() done: rc=0, stdout=, stderr=
    82 1606185861.11977: _low_level_execute_command(): starting
    82 1606185861.12019: _low_level_execute_command(): executing: /bin/sh -c '/usr/bin/python /root/.ansible/tmp/ansible-tmp-1606185860.41-269842916667107/AnsiballZ_setup.py && sleep 0'
    82 1606185861.12038: in local.exec_command()
    82 1606185861.12055: opening command with Popen()
    82 1606185861.12599: done running command with Popen()
    82 1606185861.12631: getting output with communicate()

  于是进到物理机上去查看ansible进程

# ps -ef |grep ansible
root      672540  672016 99 10:44 pts/0    00:03:06 /usr/bin/python /root/.ansible/tmp/ansible-tmp-1606185860.41-269842916667107/AnsiballZ_setup.py
root      673881  672428 51 10:47 pts/0    00:00:02 /usr/bin/python /usr/local/bin/ansible localhost -m setup
root      673893  673881 33 10:47 pts/0    00:00:00 /usr/bin/python /usr/local/bin/ansible localhost -m setup
root      673908  673893  0 10:47 pts/0    00:00:00 /bin/sh -c /bin/sh -c '/usr/bin/python /root/.ansible/tmp/ansible-tmp-1606186046.03-129145088760493/AnsiballZ_setup.py && sleep 0'
root      673909  673908  0 10:47 pts/0    00:00:00 /bin/sh -c /usr/bin/python /root/.ansible/tmp/ansible-tmp-1606186046.03-129145088760493/AnsiballZ_setup.py && sleep 0
root      673910  673909 23 10:47 pts/0    00:00:00 /usr/bin/python /root/.ansible/tmp/ansible-tmp-1606186046.03-129145088760493/AnsiballZ_setup.py
root      673914  673910 99 10:47 pts/0    00:00:01 /usr/bin/python /root/.ansible/tmp/ansible-tmp-1606186046.03-129145088760493/AnsiballZ_setup.py
root      673971  443741  0 10:47 pts/1    00:00:00 grep ansible

  再用strace追踪下673914进程

# strace -p 673914
close(216995106)                        = -1 EBADF (错误的文件描述符)
close(216995107)                        = -1 EBADF (错误的文件描述符)
close(216995108)                        = -1 EBADF (错误的文件描述符)
close(216995109)                        = -1 EBADF (错误的文件描述符)
close(216995110)                        = -1 EBADF (错误的文件描述符)
close(216995111)                        = -1 EBADF (错误的文件描述符)
close(216995112)                        = -1 EBADF (错误的文件描述符)
close(216995113)                        = -1 EBADF (错误的文件描述符)
close(216995114)                        = -1 EBADF (错误的文件描述符)
close(216995115)                        = -1 EBADF (错误的文件描述符)
close(216995116)                        = -1 EBADF (错误的文件描述符)
close(216995117)                        = -1 EBADF (错误的文件描述符)
close(216995118)                        = -1 EBADF (错误的文件描述符)
close(216995119)                        = -1 EBADF (错误的文件描述符)
close(216995120)                        = -1 EBADF (错误的文件描述符)
close(216995121)                        = -1 EBADF (错误的文件描述符)
close(216995122)                        = -1 EBADF (错误的文件描述符)
close(216995123)                        = -1 EBADF (错误的文件描述符)
close(216995124)                        = -1 EBADF (错误的文件描述符)
close(216995125)                        = -1 EBADF (错误的文件描述符)
close(216995126)                        = -1 EBADF (错误的文件描述符)
close(216995127)                        = -1 EBADF (错误的文件描述符)
close(216995128)                        = -1 EBADF (错误的文件描述符)
close(216995129)                        = -1 EBADF (错误的文件描述符)
close(216995130)                        = -1 EBADF (错误的文件描述符)
close(216995131)                        = -1 EBADF (错误的文件描述符)
close(216995132)                        = -1 EBADF (错误的文件描述符)

  终端一直刷上面的,看样子是文件描述符泄露,搜了下  docker Bad file descriptor,找到了 Spawning PTY processes is many times slower on Docker 18.09 里几位大佬排查到是容器的 nofile 太高就会卡,如果启动容器 nofile 设置低则没问题,

      在容器内执行ulimit  -n果然默认值很高

> ulimit -n
1073741816

      再查了下 docker nofile limit  找到 Docker: How to increase number of open files limit 里面描述可以在run  docker的时候设置容器内的nofile参数大小。

     于是添加 --ulimit nofile=65535 重新启动docker,并查看容器内ulimit  -n值果然变小了,而且#ansible localhost -m setup 问题也得到了解决。

4.参考

  https://github.com/pexpect/ptyprocess/issues/50
  https://github.com/docker/for-linux/issues/502
  https://github.com/moby/moby/issues/38814

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

记一次容器内执行ansible命令卡住 的相关文章

  • mybatis-plus le ge 记录

    mybatis plus le ge 记录 LazyTing的博客 CSDN博客 出异常源代码 this baseMapper selectList new QueryWrapper lt PersonnelRoleDO gt lambda
  • 腾讯云 win10链接 重置密码

    win10电脑连接windows服务器的详细步骤 我告诉你msdn 云服务器 重置实例密码 操作指南 文档中心 腾讯云 云服务器 管理登录密码 操作指南 文档中心 腾讯云 腾讯云Windows系统服务器远程登录教程 腾讯云开发者社区 腾讯云
  • Linux下使用FFmpeg将RTMP流转换为HLS

    Linux下使用FFmpeg将RTMP流转换为HLS rtmp转码hls 你知道989的博客 CSDN博客 Linux下使用FFmpeg将RTMP流转换为HLS 所需资料 安装FFmpeg 配置安装nginx并添加nginx http fl
  • MySQL 服务的启动和停止

    4 MySQL 服务的启动和停止 mysql数据库启停 头疼小宇的博客 CSDN博客
  • 相机投影矩阵的计算

    摄像机标定 Camera calibration 中存在的一个关键问题 xff1a 如何求解投影矩阵有了投影矩阵 xff0c 我们便可以把世界坐标系变化到图像坐标系 一 最小二乘法 已知条件 n个三维世界坐标点 保存在dat文件中 n个二维
  • 相机投影矩阵计算

    代码如下 A 3 1 1 1 2 4 1 4 5 B 3 6 2 1 1 4 x1 A B x2 inv A B x3 linsolve A B x1 x2 x3 solve 3 x1 x2 x3 3 6 x1 2 x2 4 x3 2 1
  • Docker EEDocker CE简介与版本规划

    Docker EEDocker CE简介与版本规划 更多干货 分布式实战 xff08 干货 xff09 spring cloud 实战 xff08 干货 xff09 mybatis 实战 xff08 干货 xff09 spring boot
  • 浏览器相关知识点总结

    今天说说浏览器相关问题 xff1a 常见的浏览器内核 xff0c 参见下表 xff1a 浏览器 RunTime内核 xff08 渲染引擎 xff09 JavaScript 引擎ChromeBlink xff08 28 xff09 Webki
  • 图像处理与计算机视觉网址导航

    1常用网站 20条常用网站网址 xff0c 更多点此 Google xff08 gfsoso xff09 直达 计算机视觉网 直达 增强现实资讯 直达 开源中国社区oschina 直达 百度搜索 直达 小木虫 xff0c 学术科研第一站 直
  • 服务器分布式部署和集群部署的区别

    服务器分布式部署和集群部署的区别 1 分布式部署 分布式是以缩短单个任务的执行时间来提升效率的 xff1b 分布式是将不同的业务分布在不同的地方 xff1b 2 集群部署 集群是将几台服务器集中在一起 xff0c 实现同一业务 xff1b
  • Vue知识点:qs

    一 qs是什么 xff1f qs 是一个增加了一些安全性的查询字符串解析和序列化字符串的库 可以进行对象与字符串之间的一个转换 二 qs的安装 qs xff0c 是axios中自带的 xff0c 也是npm仓库所管理的包 安装方式 xff1
  • Vue点击按钮跳转页面的实现方法

    1 跳转外部链接并覆盖当前页 lt el button type 61 34 primary 34 64 click 61 34 cimsInputClick 34 gt 应用入口 lt el button gt cimsInputClic
  • 警告C4819 解决办法

    问题 警告C4819 该文件包含不能在当前代码页 936 中表示的字符 请将该文件保存为 Unicode 格式以防止数据丢失 解决办法 1 如果调用的库为C语言 xff0c 增加extern 34 C 34 extern表明变量或函数是ex
  • fopen和fopen_s简介

    1 fopen函数 xff08 1 xff09 定义 FILE fopen const char filename const char mode r 打开只读文件 xff0c 该文件必须存在 r 43 打开可读写的文件 xff0c 该文件
  • 用Photoshop进行icon的制作或将其它格式图片转成icon

    用Photoshop进行icon的制作或将其它格式图片转成icon 1 准备 1 安装的ps格式里没有ico xff0c 需要安装插件 ICOFormat 8bi xff0c 搜索 ICOFormat 8bi 并根据PC选择下载 xff1b
  • dataGridVie控件绑定List<T>数据

    1 实现功能 dataGridVie控件绑定List数据 xff0c 点击按钮更新List数据并重新绑定 xff0c dataGridVie控件的数据更新 2 编程步骤 xff08 1 xff09 定义Person类 span class
  • VS2019安装、卸载及升级程序打包过程

    1 安装打包工具 在VS2019界面点击扩展菜单下的管理扩展 xff0c 如果已安装Microsoft Visual Studio Installer Project xff0c 则如下图所示 如果没有安装则选择联机 xff0c 进行下载安
  • Modbus TCP协议

    1 Modbus协议 Modbus是一种工业总线协议标准 xff0c 包括ASCII RTU TCP三种报文类型 xff0c 其物理层接口有RS 232 RS 485 RS 422 及以太网 xff0c 采用主 从方式进行通信 2 Modb
  • C#文件拷贝的方法

    1 实现功能 xff1a 打开的文件夹如果和目标文件夹不一样 xff0c 则将文件拷贝到目标文件夹 span class token class name span class token keyword string span span
  • WPF控件样式设置

    1 直接在代码中设置 span class token operator lt span span class token class name Button span Content span class token operator 6

随机推荐

  • C#多线程日志的实现

    1 定义输出目标类型 span class token keyword public span span class token keyword enum span span class token class name LogTarget
  • The power input for PSU 2 is lost

    错误信息 Dell戴尔 PowerEdge R720 服务器错误 xff1a PSU0003 Power input for PSU 2 is lost Please check PSU cables 这个错误信息为 xff1a PSU 2
  • 如何保存token-localStorage存储

    1 原理 原理是通过vue router的beforeEach钩子 xff0c 在每次路由到一个地址的时候先判断该路由是否携带了meta信息 xff0c 且该信息中的requireAuth是否为true xff0c 如果为true表示该路由
  • 在Tomcat服务器部署jar包

    在Tomcat服务器部署jar包 1 输出jar包 在eclipse环境下 xff0c 进入Run Configuration界面 xff0c 在Maven Build下选择demo 将Goals的内容改成package 2 将jar包部署
  • PTA 程序设计天梯赛(1~20题)

    文章目录 1 Hello World 5 分 2 打印沙漏 20 分 3 个位数统计 15 分 4 计算摄氏温度 5 分 5 考试座位号 15 分 6 连续因子 20 分 7 A B 20 分 8 计算指数 5 分 9 计算阶乘和 10 分
  • 关于动态(长度不定)结构体数组的两种处理方法

    讲解这个问题 xff0c 以一个例子入手 xff1a PAT xff08 A xff09 1080 Graduate Admission 方法一 xff1a 定义一个结构体数组 xff0c 为该数组开辟一块大的存储空间 xff0c 然后进行
  • 关于C++中string头文件的用法

    注意 xff1a 这里需要声明一点 xff0c 头文件string和string h是不同的 下面的代码是string的使用例子 xff0c 在string头文件下 xff0c 函数中 xff0c 是可以采取string str 61 34
  • 基于VS2010下利用MFC编写软件控制安捷伦信号源

    程控信号源 最近接触关于写 自动化测试软件 xff0c 里面用到了 xff0c 需要实现频谱仪 信号源的程序控制 所以 xff0c 就把每天遇到的问题 xff0c 和学到的知识 xff0c 进行一个总结思考 信号源程控实现 xff1a 信号
  • Qt中emit的用法:发射信号

    emit是为了调用对应的槽函数 xff0c 用来发射信号
  • OAI:Ubuntu20.04不支持OAI

    遇到一个无法解决的问题 xff0c 将ubuntu从18 04升级到了20 04 xff0c 发现ubuntu20 04不支持OAI啊 xff01
  • OAI:eNB模块和UE模块的示波器显示

  • 力扣网页PC端无法进入(问题得到解决)

    最近发现在不同地方 xff0c 使用不同WiFi时 xff0c 有些地点出现力扣网页PC端无法加载的问题 按照网上方法进行了调试 xff0c 发现帖子推荐改hosts文件 xff0c 将自己电脑https leetcode cn com 的
  • Linux临时动态调整kvm虚拟机内存

    一 运维内容描述 同事反馈在用的虚拟机内存不足 xff0c 需要调整 查看一个虚拟机的内存情况 xff0c 最大是8G内存 xff0c 当前内存显示是4G 虚拟机调整最大内存是需要关闭虚拟机的 xff0c 但现在虚拟机上部了服务 xff0c
  • stringstream的用法

    1 用stringstream来分割指定的字符字符串 xff0c 代码如下 xff1a span class token comment 用stringstream来分割指定的字符字符串 span span class token macr
  • C++字符串输入问题

    经常写核心代码模式 xff0c 对于输入输出很多情况下 xff0c 不怎么会写了 所以 xff0c 做个总结 对于如下输入 xff1a span class token comment 输入 xff1a span span class to
  • 中国系统面试0819

    一面 xff1a 30min C 43 43 xff1a 1 C 43 43 的三大特性 xff0c 以及在项目中是如何是用到的 xff08 封装 继承 多态 xff09 2 STL了解哪些 xff0c 在项目中如何使用的 xff0c 举例
  • C语言实现多态

    利用C语言实现多态 xff1a c语言多态的实现 xff0c 需要用到函数指针 函数名实际上是该函数代码存储空间的首地址 xff0c 这个地址可以通过函数指针来存放 通过改变函数指针存储的地址就可以实现多态 span class token
  • 深入浅析Mysql联合索引原理 之 最左匹配原则。

    前言 之前在网上看到过很多关于mysql联合索引最左前缀匹配的文章 xff0c 自以为就了解了其原理 xff0c 最近面试时和大牛交流中 xff0c 发现遗漏了些东西 xff0c 这里自己整理一下这方面的内容 最左前缀匹配原则 在mysql
  • kubernetes Value:将磁盘挂载到容器,PV,PVC

    6 1 介绍卷 6 1 1 卷的类型 emptyDir 用于存储临时数据的简单空目录 hostPath 用于将目录从工作节点的文件系统挂载到pod nfs 挂载到pod中的NFS共享卷 还有其他的如gitRepo gcepersistenD
  • 记一次容器内执行ansible命令卡住

    1 由来 最近在使用kylin v10系统 xff0c 发现当在此系统下运行的容器内执行 ansible localhost m setup 命令会卡住不动 xff0c 于是和同事一起经过如下排查最终找到解决问题的办法 2 环境 2 1 系