linux系统下crontab mailrop造成的拒绝服务解决办法

一、故障现象

接业务侧同事电话,其中一台server无法ssh正常连接,同时也收到宕机短信告警信息。直接ping了下主机地址可以ping通,ssh端口连接提示:ssh_exchange_identification: Connection closed by remote host 。通过管理口登录查看报错:“ login: failure forking: Cannot allocate memory/etc/initscript: fork : Cannot allocate memory ”。截图如下:

二、故障分析与处理

1、强制回收内存

从表现上来看不能fork进程不能分配内存,本来该问题可以直接重启解决,不过为了查到根因。通过从次尝试成功从管理口登录系统。登录后,不过像ps auxf命令执行老半天不出结果,通过top查看观察发现大量postdrop进程:

执行以下三个命令强制回收内存和结束业务进程,希望通过此步能正常进行系统命令操作

//手动强制回收内存
echo 3 > /proc/sys/vm/drop_caches
//上面的执行后,效果不明显,强制kill掉一些业务进程
killall java
killall postdrop

通过上面的三个命令艰难的执行后,一些命令有结果输出,不过像ps auxf 命令执行老半天仍不出结果 。通过查看/proc下的进程号发现有大量进程,尝试通过ls /proc > /mnt/proc.txt 输出到文件---经测试发现文件未能成功生成。

2、查看磁盘空间占用

由于之前也遇到由于磁盘空间满导致内存数据无法sync到磁盘上,导致内存得不到释放,最终造成进程积压的问题。这里也通过df 查看磁盘目录

发现var目录占满,通过清空/var/log下的info等可能出现的大文件 ,发现var目录仍得不到释放。进入/var/spool/postfix/目录下 du maildrop -sh ,发现半天未出现结果。

3、重启或进入单用户

这里可以进行重启或进入单用户任选一个尝试,由于是磁盘耗尽导致的问题,一般重启都可以正常进入系统。通过sync 几次后,重启主机进入系统。通过到/var/spool/postfix/maildrop下验证,发现该目录下占用了大约17G左右的空间---和之间的猜测一致。

重启后,通过观察主机进行的进程,发现cron任务执行时,都会调用sendmail 进程和触发postdrop进程执行。如下:

cron-sendmail.png

查看执行的脚本内容,未发现调用mail 相关的语句。

chkconfig --list|egrep -i 'sendmail|postfix' ,发现postfix进程已被在开机启动中关掉。查看crontab配置,发现如下:

[root@361way.com ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed

三、故障原因

1、原因

通过上面的分析,得出故障原因为:crontab进程在执行时,每执行一次会向root 进行一次汇报。即会调用后面的sendmail 进程和postdrop 进程,邮件文件会存放在/var/spool/postfix/maildrop目录 ,查看logcollect 用户的crontab任务发现, 有几百个crontab任务存在 ---感觉好傻的业务模型。造成maildrop目录文件越堆越多。目录被占满后,导致sendmail和postdrop进程长时间得不到释放。进程越堆越到,直到资源耗尽,ssh连接异常。

2、解决方法

禁用crontab MAILTO功能或crontab中新增自动清理/var/spool/postfix/maildrop目录。当然比较推荐前者,crontab里启用这个本来就是个资源浪费的功能---有查看root下的性能汇报需求者除外。禁用crontab的mailto功能操作步骤为:

vi /etc/crontab ;将‘MAILTO=root’替换成‘MAILTO="",然后service crond restart即可。如不行crontab -e 第一行增加MAILTO="" 。

时间: 2024-10-23 07:34:39

linux系统下crontab mailrop造成的拒绝服务解决办法的相关文章

XP系统下160WiFi无法开启热点的解决办法

  小编先带大家了解下XP环境下建立共享的方法: XP下默认建立共享方法的原理是在无线网卡的属性里面有"无线网络配置",然后选择添加,输入SSID(账号),再去掉"自动勾选密钥"的勾选,然后输入2次密码,点击确定.接着再右键属性当前上网网卡属性,然后"高级",接着将Internet共享下面的勾选都选上,然后在家庭网络连接处选择刚才的无线网卡,最后确定. 这样整个XP下建立的步骤就完成了.这种连接方式是点对点链接方式,只适用于苹果手机,安卓和WP手

linux服务器下忘记mysql root登录密码解决办法

1.首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL数据库. 因为在重新设置MySQL的root密码的期间,MySQL数据库完全出于没有密码保护的 状态下,其他的用户也可以任意地登录和修改MySQL的信息.可以采用将MySQL对 外的端口封闭,并且停止Apache以及所有的用户进程的方法实现服务器的准安全 状态.最安全的状态是到服务器的Console上面操作,并且拔掉网线. 2.修改MySQL的登录设置: # vi /etc/my.cnf 在[mysqld]的段中加上一句:sk

Win10系统下IE浏览器崩溃怎么办 Win10系统下IE浏览器崩溃问题的解决办法

故障现象: 浏览器上网时出现崩溃.卡死.空白等现象,尤其是涉及所有基于IE内核的浏览器,那些双内核的在兼容模式下(也就是使用IE内核)也会如此.   另外,一些调用IE内核的软件容易卡死.崩溃,例如QQ游戏大厅.网络游戏等等. 甚至是Chrome也受到了一些影响,一些涉及到Flash的功能将无法正常使用,会导致网页自动刷新. 解决方案: 临时的解决方式是卸载KB3132372补丁.   卸载补丁方法:   1.打开控制面板   左键点击"开始"按钮,输入"控制",选

笔记本Windows 7系统下玩游戏不能全屏解决办法

一.NVIDIA显卡解决方案: 1.我们先右击桌面,然后在弹出菜单点击"NVIDIA"之后我们再进入到"控制中心"效果如下所示: 2.在进入到nvidia界面中我们点击"更改平板显示器缩放"点击进入,效果如下所示: 3.接着我们点击"使用NVIDIA缩放功能"选中它,效果如下. 二.ATI显卡解决方案 1.我们同样右击桌面空白处,然后在弹出点击 "ATI的控制中心"如下所示: 2.  进入到控制中心我们点击

Linux系统下使用ntpdate同步时间

ntpd.ntpdate的区别 使用之前得弄清楚一个问题,ntpd与ntpdate在更新时间时有什么区别.ntpd不仅仅是时间同步服务器,他还可以做客户端与标准时间服务器进行同步时间,而且是平滑同步,并非ntpdate立即同步,在生产环境中慎用ntpdate,也正如此两者不可同时运行. 时钟的跃变,对于某些程序会导致很严重的问题.许多应用程序依赖连续的时钟--毕竟,这是一项常见的假定,即,取得的时间是线性的,一些操作,例如数据库事务,通常会地依赖这样的事实:时间不会往回跳跃.不幸的是,ntpda

Linux系统下nginx日志每天定时切割的脚本写法_nginx

使用Linux系统自带的命令logrotate对Nginx日志进行切割. Nginx安装目录:/usr/local/nginx/ Nginx日志目录:/usr/local/nginx/logs/./usr/local/nginx/logs/nginx_logs/ 1.添加nginx日志切割脚本 cd /etc/logrotate.d #进入目录 vi /etc/logrotate.d/nginx #编辑脚本 /usr/local/nginx/logs/*.log /usr/local/nginx

Linux命令下crontab命令_Linux

crontab是一个用来设置.删除或显示供守护进程cron执行的定时任务的命令.每一个用户都可以拥有属于自己的定时任务,定时任务文件默认以用户名命名,并放在/var/spool/cron目录,该目录普通用户无访问权限. 可以通过cron.allow 和 cron.deny文件管理用户使用crontab的权限.如果cron.allow存在,用户必须列在其中才会被允许使用cron:如果cron.deny存在,被列在其中的用户禁止使用cron:如果两者都不存在,只有超级用户才能使用cron.在Cent

Linux系统下mysqlcheck修复数据库命令(详解)_Mysql

mysqlcheck客户端工具可以检查和修复MyISAM表,还可以优化和分析表. 实际上,它集成了mysql工具中check.repair.analyze.optimize的功能. 有3种方式来调用mysqlcheck: shell> mysqlcheck[options] db_name [tables] shell> mysqlcheck[options] ---database DB1 [DB2 DB3...] shell> mysqlcheck[options] --all--d

日志-linux系统下有Sense Key:recovered error [current]错误

问题描述 linux系统下有Sense Key:recovered error [current]错误 日志里有大量如图报警,不知道是什么原因引起的,查了ASC和ASCP也没有什么结果,拜托有知道的大神,给小弟指条明路 解决方案 看看是不是硬盘有坏道,或者文件破坏 参考:http://blog.itpub.net/25362835/viewspace-1058637/ 解决方案二: http://bbs.chinaunix.net/thread-4086486-1-1.html