服务器崩溃与“巨大的任务超时”

首先,我已经读了很多有关“巨大的任务超时”内核恐慌,知道这经常发生,如果服务器资源不足。

出现在VNC控制台中的错误消息不在任何日志文件中:

[264240.505133] "echo 0 > /proc/sys/kernel/huge_task_timeout_secs" disables this message. [264240.505359] INFO: task nginx:2333 blocked for more than 120 secounds. [264240.505454] "echo 0 > /proc/sys/kernel/huge_task_timeout_secs" disables this message. [264240.505658] INFO: task nginx:2334 blocked for more than 120 secounds. [264240.505752] "echo 0 > /proc/sys/kernel/huge_task_timeout_secs" disables this message. [264240.505946] INFO: task nginx:2335 blocked for more than 120 secounds. [264240.506038] "echo 0 > /proc/sys/kernel/huge_task_timeout_secs" disables this message. [264240.506251] INFO: task php5-fpm:2415 blocked for more than 120 secounds. ... 

服务器规格

 8 Core Intel® Xeon® E5-2660V3 24 GB DDR4 320GB SSD 

该机器是KVM虚拟化。 它使用PHP5-FPM,NGINX,MySQL和其他一些较小的东西运行debian。 主要是它拥有一个网站和一个大约25 GB的大数据库MySQL数据。

磁盘使用率约为12%。

我已经安装了Munin进行监控,这没有任何exception。 但自上次崩溃以来,我也安装了sysstat但我不知道哪些日志文件可能对您有用。 所以请请求你认为需要的一个。

发生撞车事件发生在格林威治标准时间10.03.2015 17:37。

在我看来,这与MySQL有关。 这里是my.cnf

 [client] port = 3306 socket = /var/run/mysqld/mysqld.sock [mysqld_safe] socket = /var/run/mysqld/mysqld.sock nice = 0 [mysqld] user = mysql pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock port = 3306 basedir = /usr datadir = /var/lib/mysql tmpdir = /tmp lc-messages-dir = /usr/share/mysql skip-external-locking bind-address = 127.0.0.1 key_buffer = 16M max_allowed_packet = 16M thread_stack = 192K thread_cache_size = 8 myisam-recover-options = BACKUP max_connections = 50 query_cache_limit = 1M query_cache_size = 16M log_error = /var/log/mysql/error.log slow_query_log = 1 slow_query_log_file = /var/log/mysql/mysql-slow.log expire_logs_days = 10 max_binlog_size = 100M innodb_buffer_pool_size = 18G innodb_log_file_size = 256M [mysqldump] quick quote-names max_allowed_packet = 16M [mysql] [isamchk] key_buffer = 16M !includedir /etc/mysql/conf.d/ 

正如你所看到的,我configuration了MySQL,它可以使用大约80%的RAM。 MySQL服务器以50/50的读/写平均执行2k查询/秒。

就在崩溃之前,我在htop上看到使用了大约21 GB的24 GB和500 GB的1.5 GB交换,CPU使用率是正常的。

编辑:在飞机坠毁前的直接时间:

 18:27:01 CPU %user %nice %system %iowait %steal %idle 18:29:01 all 8,28 0,00 1,31 5,61 0,02 84,77 18:31:01 all 7,65 0,41 1,41 5,73 0,03 84,78 18:33:01 all 7,95 0,00 1,25 5,51 0,02 85,27 18:35:01 all 8,87 0,00 1,42 5,53 0,03 84,15 18:37:01 all 8,99 0,42 1,40 5,94 0,03 83,22 Average: all 8,65 0,16 1,35 5,08 0,03 84,73 

编辑:

慕尼黑的图像

View post on imgur.com

MySQL查询

编辑:

我联系了我的ISP,他们说,事故发生时没有发生任何exception。 所以这与我的设置有关。 现在我将检查如果我将innodb_buffer_pool_size减less到14 GB并添加innodb_flush_method = O_DIRECT会发生什么情况。

问题不是内核恐慌。 您在控制台上看到的是在内核调用中挂起的进程。

您应该检查控制台或/ var / log / syslog或/ var / log / messages并search由内核logging的完整堆栈跟踪。 你会知道哪个子系统很慢。 可能是由@Belmin Fernandez提到的磁盘,可能是networking…

现在你也必须从主机获取一些统计数据。 如果CPU使用率或磁盘I / O过度,则可能导致其他虚拟机在同一主机上运行导致资源匮乏。 这将是很难确定这是否只是从虚拟机的原因。

KVM支持半虚拟化驱动程序。 检查ISP是否已安装并且在主机上运行的所有VM上都是最新的。

如果你在同一台机器上同时运行MySQL和Nginx,确保MySQL和Nginex可以将所有活动的数据保存在RAM中。 分配给MySQL的80%可能会高。

您可以请张贴文件系统caching的Munin图表。 当FScaching越来越低时,你的虚拟机就会饿死内存。

如果你有访问控制台,你可以使用内核的魔法SysRq键触发任务列表。 启用它echo 1 > /proc/sys/kernel/sysrq ,然后你可以使用控制台列出正在运行的任务: ALT + SysRq + t