解决texlive化学式转换镜像经常偶发性进程堆积导致卡顿问题
前言
之前在 使用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化学式转换镜像经常偶发性进程堆积导致卡顿问题的更多相关文章
- 解决iPhone滑动时滑到另一个层级导致卡顿问题
问题概览: 两个div都可以滑动时,会造成滑动顶层div时,底层div也会跟着滑动.如图示. 解决方法: 添加CSS即可. 代码如下 * { -webkit-overflow-scrolling: t ...
- 解决Vue-cli3.0下scss文件编译过慢、卡顿问题
在使用Vue-cli 3.0构建的项目中,可能存在项目编译过慢的问题,具体表现在编译时会在某一进度比如40%时停顿,等好一会儿才能够编译完成.这使得浏览器中的实时预览也会卡顿,不利于我们快速查看效果, ...
- 解决拼团首页swiper组件手动轮播卡顿问题
解决 swiper lag , 可能是渲染背景backface-visibility后导致卡顿吧! //以下代码添加到.swiper-wrapper中 -webkit-perspective: 300 ...
- 【C++】解决vs2015经常卡顿的办法
VS2015经常性的卡顿,参考了zhihu里问答的办法,编译和使用的时候的确快多了 为什么vs2015经常卡顿? https://www.zhihu.com/question/34911426 感谢z ...
- 说说C#的async和await 解决卡顿问题 转
C# 5.0中引入了async 和 await.这两个关键字可以让你更方便的写出异步代码. 看个例子: 可以看到,async和await关键字只是把上面的代码变得更简单易懂而已. public cla ...
- img加载卡顿,解决办法
我觉得我在这个项目里遇到了太多的第一次.比如上一篇博文:在在360.UC等浏览器,img不加载原因. 当前情况是:图片加载缓慢,图片加载时出现卡顿. 上图:我缩放了图片,估计有点变形.能说明情况就行, ...
- 关于codeforces国内访问卡顿慢的最新解决办法,谷歌字体库/屏蔽facebook链接
在host里最后加上 方法起源来自于https://blog.csdn.net/qq_40693171/article/details/83623409 但是里面的360字体库已经停运http://w ...
- Android App解决卡顿慢之内存抖动及内存泄漏(发现和定位)
内存抖动是指在短时间内有大量的对象被创建或者被回收的现象,内存抖动出现原因主要是频繁(很重要)在循环里创建对象(导致大量对象在短时间内被创建,由于新对象是要占用内存空间的而且是频繁,如果一次或者两次在 ...
- 【Mac】解决「另一个活跃的 Homebrew 进程正在进行中」问题
问题描述 在安装 tesseract 的语言包时,由于网络下载速度太慢,我按下 ctrl + z 退出了安装,当再次输入安装命令时,系统报错如下: 解决方法 使用以下命令删除 homebrew 进程锁 ...
随机推荐
- pycharm安装pika提示CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://repo.anaconda.com>
1. 问题描述: pycharm安装第三方库时提示CondaHTTPError: HTTP 000 CONNECTION FAILED. 2. 错误原因:默认镜像源访问速度过慢,会导致超时从而导致更新 ...
- javascript-vue介绍
vue.js是一个用于创建web交互页面的库 从技术角度讲,vue专注于MVVM模型的viewModel层,它通过双向数据绑定把view层和model层连接起来,实际DOM封装和输出格式都被抽象为Di ...
- 重学c#系列——list(十二)
前言 简单介绍一下list. 正文 这里以list为介绍. private static readonly T[] s_emptyArray = new T[0]; public List() { t ...
- SpringCloud微服务实战——搭建企业级开发框架(六):使用knife4j集成Swagger2接口文档
knife4j是为集成Swagger生成api文档的增强解决方案,前后端Java代码以及前端Ui模块进行分离,在微服务架构下使用更加灵活, 提供专注于Swagger的增强解决方案,不同于只是改善增强前 ...
- activiti会签 多实例例子
在实际的业务中,可能存在存在这么一种情况,当流程运行到某一个环节时,可能需要同时多个人的参与,才可以完成此环节.此时就可以用到activiti的多实例来解决此问题. 一.将一个节点设置成多实例的方法: ...
- 云效Flow如何实现阿里云ECS多环境发布
一.背景 云效Flow基于标签功能实现阿里云ECS多环境发布,在软件开发和部署过程中,我们的软件往往需要在不同的运行环境中运行,例如:开发人员本地开发环境.测试团队的测试环境.还有类生产环境和生产环境 ...
- opencv学习(一)——图像入门
图像入门 一.读取图像 在opencv中使用cv.imread(filename, flags)函数读取图像.filename参数表示读取图像的路径.读取图像的路径应完整给出,且不能含有中文,否则在调 ...
- 精准测试系列分享之一:JaCoCo 企业级应用的优缺点分析
一.JaCoCo简介 JaCoCo是Eclipse平台下的开源产品,以小型,轻量化著称,常见集成在Eclipse Workbench中,除此之外的启动方式包括对接Ant和Maven,或是命令行的方式进 ...
- jquery正则表达式验证【是否带有小数、是否中文名称组成、是否全由8位数字组成、电话码格式、邮件地址】
1 <form name="myform" action="" onsubmit="return fun1()"> 2 < ...
- 链表中倒数第K个结点 牛客网 剑指Offer
链表中倒数第K个结点 牛客网 剑指Offer 题目描述 输入一个链表,输出该链表中倒数第k个结点. # class ListNode: # def __init__(self, x): # self. ...