일부 쿼리를 완료하는 데 오랜 시간이 걸리고 /var/log/messages에 다음 항목이 많이 표시되는 MySQL 문제를 해결하고 있습니다.
Jan 28 05:52:15 64455-alpha01 kernel: [2529273.616327] INFO: task mysqld:4123 blocked for more than 120 seconds.
Jan 28 05:52:15 64455-alpha01 kernel: [2529273.616525] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
Jan 28 05:52:15 64455-alpha01 kernel: [2529273.616813] mysqld D 000000000000000d 0 4123 3142 0x00000080
무슨 뜻이에요? MySQL 스레드에 어떤 영향을 미칩니까(4123은 스레드 ID입니까?)
지금 확인했을 때의 값은 다음과 같습니다 /proc/sys/kernel/hung_task_timeout_secs
.
$ cat /proc/sys/kernel/hung_task_timeout_secs
120
구체적으로 프로세스에 어떤 영향을 미치는지 궁금합니다.
나는 포럼에서 프로세스가 너무 많은 메모리를 차지할 때 발생한다는 것을 읽었습니다.
답변1
"작업 중단"은 커널이 작업을 중단할 수 없는 "D" 상태로 만드는 버그입니다. 이 상태의 작업/프로세스는 종료될 수 없으며 종료될 수도 없습니다 kill -9
.
귀하의 메시지는 /var/log/messages
작업 4123
(명백히 mysql 데몬)이 120초 이후 이 상태에 있었다는 것을 의미합니다. 이는 mysql 데몬이 리소스를 기다리고 있음을 의미합니다. 대부분의 "D" 상태는 I/O로 인해 발생합니다.
프로세스가 열린 파일 핸들에 대해 읽기 시스템 호출을 요청하면 파일을 읽어야 할 때마다 "D" 상태로 들어갑니다. 프로세스가 "차단"되었습니다.
이 값은 /proc/sys/kernel/hung_task_timeout_secs
표시되는 메시지가 로그에 표시되어야 하는 시기만 정의합니다. 메시지에 나와 있듯이 값을 로 설정하면 메시지를 비활성화할 수 있습니다 0
. 그러나 이것은 문제를 해결하지 못합니다.
다음 두 가지 방법으로만 중단 불가능 상태를 해결할 수 있습니다.
- 시스템을 다시 시작하거나...
- 프로세스에 어떤 리소스가 필요한지 알아보고 해당 리소스가 사용 가능한지 확인하세요.
답변2
echo 0 > /proc/sys/kernel/hung_task_timeout_secs
단지 경고를 침묵시킬 뿐입니다. 그 외에는 영향이 없습니다. 0보다 큰 값을 사용하면 작업이 일정 기간 동안 차단될 때마다 이 메시지가 표시됩니다.
경고는 시스템에 문제가 있음을 나타냅니다. 내 경험에 따르면 이는 일반적으로 프로세스에 대한 디스크 I/O 부족으로 인해 프로세스가 커널 공간에서 최소 120초 동안 차단됨을 의미합니다. 이는 너무 많은 메모리를 사용하는 많은 스와핑 때문일 수 있습니다. 예를 들어 웹 서버의 로드가 너무 많고 시스템을 너무 많은 Apache 하위 프로세스로 구성한 경우입니다. 귀하의 경우 메모리 및 데이터 IO를 놓고 경쟁하는 mysql 프로세스가 너무 많을 수 있습니다.
이는 SAN이 과부하되거나 디스크에 많은 재시도를 유발하는 소프트 오류가 있는 경우와 같이 기본 스토리지 시스템의 성능이 저하되는 경우에도 발생할 수 있습니다. 이러한 경고는 작업이 IO 명령을 완료하기 위해 오랫동안 기다려야 할 때마다 발생할 수 있습니다.