首先,我已经读了很多有关“巨大的任务超时”内核恐慌,知道这经常发生,如果服务器资源不足。
仅出现在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
编辑:
慕尼黑的图像
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