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);
}
私はあなたが正確に何を意味するのかわかりません:
これは嵐が近づいているという信号なのか?
しかし、あなたのデバイスの1つに問題があるようです。
PS:注意深く読むと、コードのメッセージはですがperf: interrupt took too long
メッセージはですperf interrupt took too long
。コロンはカーネルバージョン4.6に追加されました。
答え2
しばらく私のデスクトップシステムに同様のメッセージが表示されました。これは、1つまたは時には複数のコアが数分以上ノンストップディスクI / O(D
in)に停止した後に発生します。ps
I / Oスケジューリングの競合状態が原因でデッドロックが発生したと思われますが、デバッグ方法がわかりません。 CFQの代わりに適切なディスクの期限スケジューラに切り替えることが役に立つようです。
# echo deadline > /sys/block/sdX/queue/scheduler
私はスケジューリングプロセスで短い一時停止を観察しましたが、デッドラインスケジューラの2番目のキューは長い一時停止を軽減するようです。
誰もがこれについてより多くの情報を明らかにすることができれば幸いです。
編集する
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が犯人です。
それでも情報は失われません。