Linux 定时任务引发的大问题

问题描述

昨天一台开发服务器出现了很奇怪的问题,项目网站无法访问,ssh登录时非常慢,半分钟才进去,在命令行敲命令几乎没有反应,要耐心的等待 进去后用 top 查看系统状态,结果很吓人,平均负载值在360,Tasks数量超级大(具体值忘了),用VI编辑文件都有异常提示,系统几乎瘫痪

解决过程

决定先降低负载,好能正常操作,不然连输入命令都费劲,然后再找原因,从根解决 执行 top 时,在进程列表中看到了大量的 postdrop 进程,很明显这个有问题 先把他停了,让系统有个喘气的机会 #ps -ef|grep postdrop | grep -v grep | awk '{print "kill -9 " $2}' |sh 看日志 找线索 /var/log 下,发下 maillog 文件很大、很新,和之前的嫌疑进程 postdrop 很符合 从 maillog 中发现大量的如下信息 Apr 21 16:56:13 AY140 postfix/postdrop[2377]: warning: mail_queue_enter: create file maildrop/157768.2377: No space left on device 可以看出大概,系统写邮件文件时失败,因为没空间了 查看磁盘空间信息 # df -h 系统盘的使用率是 94%,块空间没满 再看inode使用情况 # df -i 系统盘的Inodes使用率100% 没Inodes可用空间,自然干啥都有问题,现在最紧急的就是清理空间

是谁占用了大量空间?

从日志信息中可以知道,postfix 一直往 maildrop 目录下创建文件,现在失败,说明之前肯定成功创建了很多文件,postfix应该就是凶手 但这个maildrop目录具体在哪儿?搜索资料后,找到了他的绝对路径 /var/spool/postfix/maildrop 看下这个目录占用的空间大小 # du -sh . 4G 多,找对地方了,就是这里的大量文件占用的空间,删掉其中所有文件 # ls | xargs rm -f 又是漫长的等待,删完后,空间占用值直接就降下来了 到这,燃眉之急已经解决,系统能正常点的运行了,下面就要找问题的根本原因 是谁启动了那么多postdrop进程? 在删除 maildrop 文件之前,复制出来了几个文件,内容都是一个命令的报错信息 再查看进程树 # pstree 发现是cron启动了sendmail,sendmail启动了postdrop 对上了,那个报错的命令正是在cron中定时执行的一个任务,而且是个高频执行的任务 大概明白了问题的来源: (1)定时任务执行的程序报错,输出错误信息 (2)系统要通过sendmail把错误信息发给管理员 (3)sendmail会使用postdrop程序将邮件存入postfix队列目录下的maildrop子目录 我对邮件这部分不熟悉,不知道怎么处理,想到的最简单办法就是不让定时任务出现错误信息,那么就不会发送邮件了 办法是让定时任务的程序输出重定向,在那条定时任务后面加上 " &>/dev/null",相当于把任务执行的结果信息扔掉了 之后用 top 观察了一段时间,postdrop进程不再出现,系统负载恢复正常,问题解决,接下来就是分析定时任务执行的那个程序为什么报错,应该比较简单了

本文分享自微信公众号 - 性能与架构(yogoup)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-04-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Django Scrapy

Elasticsearch1.0 介绍

优势 开源,稳定,快速,可扩展 由 Java开发 基于 restful web接口与服务器交互的分布式搜索引擎 搜索引擎除了elasticsearch还有 s...

29550
来自专栏小工匠技术圈

【Java小工匠】JavaNIO-基础概念

阻塞与非阻塞主要是程序等待消息通知时的状态角度来说的。阻塞调用是指调用结果返回之前,当前线程会被挂起,一直处于等待消息通知,不能够执行其他业务。

8830
来自专栏java思维导图

Cookie、Session、Token那点事儿

前言:新公司项目中使用到了Cookie,在各大Android技术讨论群向前辈们取经讨论这cookie、session、token这仨哥们的时候,很多开发者说法不...

47630
来自专栏Bug生活2048

Windows下定时运行Python程序

程序或脚本中填写的一般是编译器的名称,一般对Python来说就是Python.exe(找到你的安装路径),添加参数就是你所要执行的python文件(完整路径),...

39620
来自专栏编程

分布式应用异常测试一二说

异常测试按性质分为应用层的业务逻辑异常测试、系统硬件/网络/文件/数据库/缓存/中间件异常测试,其中包含了许多的场景(单机、分布式),但所有的场景均和这两项有直...

27660
来自专栏小樱的经验随笔

利用Git工具将本地创建的项目上传到Github上

作为一个对前沿技术很看好的小青年,怎么能不会用Github呢?一年前我创建了Github,也知道git,但是尝试过用,但是就没弄明白,很多粉丝都问我Github...

11940
来自专栏腾讯NEXT学位

前端页面热更新实现方案

57950
来自专栏Pythonista

web service基础知识

<!-- p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px '.PingFang SC'; color: ...

32430
来自专栏PHP技术大全

通过Web安全工具Burp suite找出网站中的XSS漏洞实战(二)

笔者6月份在慕课网录制视频教程XSS跨站漏洞 加强Web安全,里面需要讲到很多实战案例,在漏洞挖掘案例中分为了手工挖掘、工具挖掘、代码审计三部分内容,手工挖掘篇...

39040
来自专栏IMWeb前端团队

npm 中如何下载特定的组件版本

本文作者:IMWeb helinjiang 原文出处:IMWeb社区 未经同意,禁止转载 本文详细讨论了 npm 中依赖版本的版本号配置写法及比较。 ...

22860

扫码关注云+社区

领取腾讯云代金券