洛杉矶MC机房 高速低价18元起

DIYVM

Directadmin的dataskq进程占用cpu 100%经常导致死机

提示:如果官网是英文页面,建议使用谷歌浏览器能同步翻译页面。点击下载【谷歌浏览器最新绿色便携版】
注意:部分文章发布时间较长,可能存在未知因素,购买时建议在本站搜索商家名称,先充分了解商家动态。
交流:唯一投稿邮箱:hostvps@88.com。

问题症状

 

这是一个蛮悲催的bug问题,directadmin官方帮助文档中有此记载,它会长期占用cpu 100%,且会造成死机。

 

参详http://help.directadmin.com/item.php?id=402。

而事实上会造成该错误的原因远远不止如此。但总体的解决思路还是一致的。

原因检查

我们可以通过dataskq的错误日志,来看看具体发生过什么。执行以下命令行,读取最后50行日志dataskq错误日志。

tail -n 50 /var/log/directadmin/errortaskq.log
  • 到目前为止本人发现已有多种错误日志内容记录。例如如下:

2016:01:11-20:31:18: Ticket::deliverMessage::Can’t read ./data/admin/tickets.list: Unable to get Lock on file:file is locked by another process

  • 该问题的原因通常是directadmin面板中的message system里的邮件ticket太多了。导致无法正常读取。

2016:01:06-20:04:01: Username administrator is 13 characters long, but the directadmin.conf has this setting ‘max_username_length=10’

  • 该问题的原因是用户命名大于13个字符,而默认只允许10个字符以内。虽然也可以修改/usr/local/directadmin/conf/directadmin.conf文件的max_username_length值,但最大也只能设置为14个字符,因此还是在创建用户名字的时候就规避比较好。

2016:02:05-14:14:37: ConfigFile::writeFile(./data/admin/brute_user.data) : Timestamp from when it was read is different, overwriting anyway

解决方法

知道了具体问题原因,那么即使不能完全杜绝,但至少也可以尽量去避免和优化。下面就说说针对这类问题如何处理。

① 首先,如果还未死机,但是已知dataskq占用cpu100%,那么就先将以下命令步骤操作。
在SSH中执行如下命令行;

killall dataskq
> /usr/local/directadmin/data/admin/brute_log_entries.list
sed -i 's/root \/usr/root nice -n 19 \/usr/g' /etc/cron.d/directadmin_cron

以上命令行的作用是,结束掉当前的dataskq进程,将/usr/local/directadmin/data/admin/brute_log_entries.list内容清空,并将datasqk的优先级调低。
/usr/local/directadmin/data/admin/brute_log_entries.list 该文件保存了主机的登录日志,包括登录成功或失败的所有纪录,由于全球网络环境并不那么清净,有大量的肉机无时无刻不在扫描破解攻击任意ip,因此可能有大量的记录保存在该文件内,而该文件是属于文本文件,长时间未清理,该文件会变的很大,一个很大的文本文件如果被打开,是非常占用资源的。因此及时对其清理。

② 引发该问题的大部分情况都是硬盘占用大量IO读写,导致硬盘运行缓慢,然后任何进程都变的非常慢,效率越来越低,由于它是一个长时间运行的进程,最终导致内存可能耗尽,然后就死机了。因此我们还要另行检查一下是否有可能是大量的小型文件占用硬盘,例如message system,即directadmin中的内部邮件提醒,若有大量message邮件,在点击message时就可能会造成死机,因此我们需要将其及时清理。可以在/home/用户/Maildir/new/ 中将其清理掉,例如如果是admin用户,则

rm -f /home/admin/Maildir/new/*

然后从面板中删除message列表

> /usr/local/directadmin/data/admin/tickets.list

另外,在directadmin自身的目录中还有一份TICKETS保留数据,时间长了会累积的比较大。可以通过以下命令清理。

rm -rf /usr/local/directadmin/data/tickets/*

 

③ 在操作完1和2后,本次的处理就已经结束,暂时就已经正常了。接下来我们要对directadmin以上的项做优化。以免下次还因此相同的原因造成出错。优化的内容有三项。分别是“定期清理message邮件“,“自动清理brute_log_entries.list的登录日志列表”,“屏蔽已知的恶意ip登录”
定期清理message邮件: 我们可以在如图中的位置,设置一个值作为合理的自动清理日志的周期。

自动清理brute_log_entries.list的登录日志列表:我们需要在ssh中创建cron计划任务,让它自动清空登录日志,方法如下

crontab -e

然后编辑内容,例如我们设置为每周五下午两点自动清理brute_log_entries.list。编辑内容如下

0 14 * * 5 > /usr/local/directadmin/data/admin/brute_log_entries.list

再设置删除tickets文件和列表。

0 15 * * 5  rm -rf /usr/local/directadmin/data/tickets/*
2 15 * * 5  > /usr/local/directadmin/data/admin/tickets.list

保存编辑内容,并重启生效。

service crond restart

屏蔽已知的恶意ip登录:

About 贝壳

【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。

 收藏 (0) 打赏

您可以选择一种方式赞助本站

支付宝扫一扫赞助

微信钱包扫描赞助

本文链接:贝壳主机网 » Directadmin的dataskq进程占用cpu 100%经常导致死机

分享到: 生成海报
香港/美国/国内高速VPS
切换注册

登录

忘记密码 ?

切换登录

注册

我们将发送一封验证邮件至你的邮箱, 请正确填写以完成账号注册和激活