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);
}
나는 당신이 정확히 무슨 뜻인지 모르겠어요 :
이것은 폭풍이 다가오고 있다는 신호인가?
하지만 귀하의 장치 중 하나에 문제가 있는 것 같습니다.
추신: 주의 깊게 읽으면 코드의 메시지는 이지만 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가 범인입니다.
그래도 정보는 손실되지 않습니다.