前言

之前在 使用Python定时清理运行超时的pdflatex僵尸进程 博文中我采用python脚本开启定时任务清理pdflatex僵尸进程,线上4u2G的k8s pod部署了3个,pdflatex执行过程是是比较耗cpu的,内存占用微乎其微,但是pod在实际在运行中偶尔还是会出现一些问题

问题

问题一:K8s POD存储超过100M,POD down了,但是资源没有被回收,导致k8s命名空间资源被空耗

问题二:每隔一段时间偶发性单个pod进程积压,定时清理脚本会down掉,清理任务无法正常运行

问题三:主要是你还不知道那个pod有问题,所有的请求都是通过k8s负载均衡到各个pod中去,一旦路由到有问题的pod,请求就挂起了,你得本地配置kubectl进入到生产的pod中去查看进程,找到问题pod,手动清理进程然后重启清理任务,但是清理完你会发现过几天又会出现同样的问题,人肉运维负担很重

解决

问题一

第一个问题的产生是由于我们在执行pdflatex时候会生成tex和pdf文件,当我们正常执行完成之后,会清理这些文件,但是如果是僵尸进程的话,我们在清理进程的时候也需要把进程对应的文件清理掉,清理脚本如下:

def clean_files():
nowtime = datetime.datetime.now()
# 获取时间差5分钟(因为文件创建超过5分钟的要删除掉)
deltime = datetime.timedelta(seconds=120)
# 获取当前时间减去5分钟时间差
nd = nowtime - deltime
path = "/home/"
files = os.listdir(path)
for file in files:
filectime = get_filectime(path + file)
if filectime < nd and len(file) > 32:
os.remove(path + file)
logging.info("清理文件:"+file)

问题二

第二个问题比较严重,产生的原因有如下几个:

1、clean_files 偶发性异常,导致定时任务挂掉,这里已经判断了文件创建时间5分钟在执行删除偶发性出现文件找不到的异常,导致清理定时任务挂掉,判断是由于pdflatex进程积压导致clean_files一直没有拿到cpu的执行权,当执行os.remove的时候那些“不正常”的文件被“正常”的进程清理掉了,导致报错

2、p.terminate()方法没有生效,这一块应当是texlive的bug导致,之前的清理进程我在部署生产的时候放到10分钟执行一次,但是由于pdflatex的cpu消耗较多,如果有较多的错误语法的转换或者稍高一点的并发,都是导致短暂是cpu压力陡增,这时部分pdflatex进程已经假死,直接给进程发送terminate指令,进程也无法响应

解决:第一个问题比较简单,try catch包裹一下,一次执行失败下次执行即可,无伤大雅;第二问题,问题没有定位出来,偶发性的,有的节点运行了几个月也都没有问题,但是就是偶尔有个新节点老是喜欢出问题,没辙了只能暴力点,上代码

def process_checker():
try:
logging.info("pdflatex进程清理")
os.system("kill -9 `ps -ef | grep pdflatex | grep pdftex | awk '{print $1}'`")
except Exception as e:
logging.error("清理进程出错") try:
clean_files()
logging.info("文件清理成功")
except Exception as e:
logging.error("清理文件出错")

其实一开始我用的是kill想平滑一点,但是运行一段时间发现根本kill不掉,所以加了个 -9 来终结那些令人糟心的进程

定时任务也去掉了,一切从简,while循环,每次睡60秒,循环里的代码try catch,确保如果高峰期某个节点发生卡顿可以在一分钟内自动恢复,这样就免去了人肉运维,并且又在生产环境增加了两个实例,好长一段时间都没有反馈卡顿的问题了

解决texlive化学式转换镜像经常偶发性进程堆积导致卡顿问题的更多相关文章

  1. 解决iPhone滑动时滑到另一个层级导致卡顿问题

    问题概览: 两个div都可以滑动时,会造成滑动顶层div时,底层div也会跟着滑动.如图示. 解决方法: 添加CSS即可. 代码如下 * { -webkit-overflow-scrolling: t ...

  2. 解决Vue-cli3.0下scss文件编译过慢、卡顿问题

    在使用Vue-cli 3.0构建的项目中,可能存在项目编译过慢的问题,具体表现在编译时会在某一进度比如40%时停顿,等好一会儿才能够编译完成.这使得浏览器中的实时预览也会卡顿,不利于我们快速查看效果, ...

  3. 解决拼团首页swiper组件手动轮播卡顿问题

    解决 swiper lag , 可能是渲染背景backface-visibility后导致卡顿吧! //以下代码添加到.swiper-wrapper中 -webkit-perspective: 300 ...

  4. 【C++】解决vs2015经常卡顿的办法

    VS2015经常性的卡顿,参考了zhihu里问答的办法,编译和使用的时候的确快多了 为什么vs2015经常卡顿? https://www.zhihu.com/question/34911426 感谢z ...

  5. 说说C#的async和await 解决卡顿问题 转

    C# 5.0中引入了async 和 await.这两个关键字可以让你更方便的写出异步代码. 看个例子: 可以看到,async和await关键字只是把上面的代码变得更简单易懂而已. public cla ...

  6. img加载卡顿,解决办法

    我觉得我在这个项目里遇到了太多的第一次.比如上一篇博文:在在360.UC等浏览器,img不加载原因. 当前情况是:图片加载缓慢,图片加载时出现卡顿. 上图:我缩放了图片,估计有点变形.能说明情况就行, ...

  7. 关于codeforces国内访问卡顿慢的最新解决办法,谷歌字体库/屏蔽facebook链接

    在host里最后加上 方法起源来自于https://blog.csdn.net/qq_40693171/article/details/83623409 但是里面的360字体库已经停运http://w ...

  8. Android App解决卡顿慢之内存抖动及内存泄漏(发现和定位)

    内存抖动是指在短时间内有大量的对象被创建或者被回收的现象,内存抖动出现原因主要是频繁(很重要)在循环里创建对象(导致大量对象在短时间内被创建,由于新对象是要占用内存空间的而且是频繁,如果一次或者两次在 ...

  9. 【Mac】解决「另一个活跃的 Homebrew 进程正在进行中」问题

    问题描述 在安装 tesseract 的语言包时,由于网络下载速度太慢,我按下 ctrl + z 退出了安装,当再次输入安装命令时,系统报错如下: 解决方法 使用以下命令删除 homebrew 进程锁 ...

随机推荐

  1. pycharm安装pika提示CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://repo.anaconda.com>

    1. 问题描述: pycharm安装第三方库时提示CondaHTTPError: HTTP 000 CONNECTION FAILED. 2. 错误原因:默认镜像源访问速度过慢,会导致超时从而导致更新 ...

  2. javascript-vue介绍

    vue.js是一个用于创建web交互页面的库 从技术角度讲,vue专注于MVVM模型的viewModel层,它通过双向数据绑定把view层和model层连接起来,实际DOM封装和输出格式都被抽象为Di ...

  3. 重学c#系列——list(十二)

    前言 简单介绍一下list. 正文 这里以list为介绍. private static readonly T[] s_emptyArray = new T[0]; public List() { t ...

  4. SpringCloud微服务实战——搭建企业级开发框架(六):使用knife4j集成Swagger2接口文档

    knife4j是为集成Swagger生成api文档的增强解决方案,前后端Java代码以及前端Ui模块进行分离,在微服务架构下使用更加灵活, 提供专注于Swagger的增强解决方案,不同于只是改善增强前 ...

  5. activiti会签 多实例例子

    在实际的业务中,可能存在存在这么一种情况,当流程运行到某一个环节时,可能需要同时多个人的参与,才可以完成此环节.此时就可以用到activiti的多实例来解决此问题. 一.将一个节点设置成多实例的方法: ...

  6. 云效Flow如何实现阿里云ECS多环境发布

    一.背景 云效Flow基于标签功能实现阿里云ECS多环境发布,在软件开发和部署过程中,我们的软件往往需要在不同的运行环境中运行,例如:开发人员本地开发环境.测试团队的测试环境.还有类生产环境和生产环境 ...

  7. opencv学习(一)——图像入门

    图像入门 一.读取图像 在opencv中使用cv.imread(filename, flags)函数读取图像.filename参数表示读取图像的路径.读取图像的路径应完整给出,且不能含有中文,否则在调 ...

  8. 精准测试系列分享之一:JaCoCo 企业级应用的优缺点分析

    一.JaCoCo简介 JaCoCo是Eclipse平台下的开源产品,以小型,轻量化著称,常见集成在Eclipse Workbench中,除此之外的启动方式包括对接Ant和Maven,或是命令行的方式进 ...

  9. jquery正则表达式验证【是否带有小数、是否中文名称组成、是否全由8位数字组成、电话码格式、邮件地址】

    1 <form name="myform" action="" onsubmit="return fun1()"> 2 < ...

  10. 链表中倒数第K个结点 牛客网 剑指Offer

    链表中倒数第K个结点 牛客网 剑指Offer 题目描述 输入一个链表,输出该链表中倒数第k个结点. # class ListNode: # def __init__(self, x): # self. ...