我刚刚检查了我的服务器,dmesg
因为我的服务器时不时地开始崩溃。我在那里读到以下行:
perf interrupt took too long (2528 > 2500), lowering kernel.perf_event_max_sample_rate to 50000
出现几次。
我记得 perf 是一个性能分析工具,但不记得安装过它。所以我检查了:
~$ dpkg -l *perf*
dpkg-query: no packages found matching *perf*
我的问题:
- 这是暴风雨即将来临的征兆吗?因为这一行出现了几次,然后出现了以以下开头的堆栈转储
rcu_sched detected stalls
- 这些从哪里来?
答案1
该消息来自Linux内核。更准确地说,它来自于perf_duration function
在linux/kernel/events/core.c
:
static void perf_duration_warn(struct irq_work *w)
{
printk_ratelimited(KERN_INFO
"perf: interrupt took too long (%lld > %lld), lowering "
"kernel.perf_event_max_sample_rate to %d\n",
__report_avg, __report_allowed,
sysctl_perf_event_sample_rate);
}
我不知道你的确切意思是:
这是暴风雨即将来临的征兆吗?
但我怀疑您的一台设备有问题。
PS:如果你仔细阅读,你会发现代码中的消息是,perf: interrupt took too long
但你的消息是perf interrupt took too long
。冒号是在内核版本 4.6 中添加的。
答案2
一段时间以来,我的桌面系统上一直出现类似的消息。它会在一个或有时几个核心在不间断磁盘 I/O ( D
in ps
) 中停滞几分钟或更长时间后出现。我怀疑 I/O 调度中的某些竞争条件会导致死锁,但不知道如何调试它。切换到适当磁盘的截止时间调度程序而不是 CFQ 似乎有帮助:
# echo deadline > /sys/block/sdX/queue/scheduler
我观察到调度过程中有短暂的暂停,但截止日期调度程序的第二个队列似乎减轻了长时间的停顿。
如果有人能对此有更多的了解,我也将不胜感激。
编辑
我不知道rcu_sched
错误/警告是否相关,但很有可能。我不明白它们,可能是因为我的内核配置不同。
当一个核心停滞时,我看到的ps
是
$ ps axu | grep ' D'
dirk 4720 13.0 5.1 1615772 842444 pts/3 Dl+ 07:27 24:54 iceweasel -P default
用于执行 I/O 的进程。D
根据 ,表示“不间断睡眠(通常是 I/O)” man ps
。
答案3
如果您正在加密交换空间,则可能会经常引发此错误。
经常。
dm_crypt 是罪魁祸首。
虽然没有丢失信息。