LKBEN11013: Hangcheck value past margin! This message is recorded muliple times in your messages log file


This article has not been checked!

LKB | Created: 02/04/2020 | Version: 0 | Language: EN | Rating: 0 | Outdated: False | Marked for deletion: False

Author: Wim Peeters - Keskon GmbH & Co. KG


Symptom

Your log is full of Hangcheck value past margin messages

Cause

Your kernel is configured with the hangcheck timer and your system thinks it looses time or hangs for a certain time

Solution

Well, if your think this message is terrible I do not blame you. It just doesn't look nice in your logs. This message is defined in the hangcheck-time.c file. Under normal circumstances this message can be ignored. Hangcheck is made for rebooting your computer when a certain timer has been passed. Long before this timer is reached, it records this message in the log. (/var/log/messages)

file: hangcheck-timer.c

You will find this in the beginning of the file

 * The hangcheck-timer driver uses the TSC to catch delays that
 * jiffies does not notice.  A timer is set.  When the timer fires, it
 * checks whether it was delayed and if that delay exceeds a given
 * margin of error.  The hangcheck_tick module paramter takes the timer
 * duration in seconds.  The hangcheck_margin parameter defines the
 * margin of error, in seconds.  The defaults are 60 seconds for the
 * timer and 180 seconds for the margin of error.  IOW, a timer is set
 * for 60 seconds.  When the timer fires, the callback checks the
 * actual duration that the timer waited.  If the duration exceeds the
 * alloted time and margin (here 60 + 180, or 240 seconds), the machine
 * is restarted.  A healthy machine will have the duration match the
 * expected timeout very closely.


and here you find the part that is responsible for the message:


    if (tsc_diff > hangcheck_tsc_margin) {
        if (hangcheck_dump_tasks) {
            printk(KERN_CRIT "Hangcheck: Task state:\n");
            handle_sysrq('t', NULL, NULL, NULL);
        }
        if (hangcheck_reboot) {
            printk(KERN_CRIT "Hangcheck: hangcheck is restarting the machine.\n");
            machine_restart(NULL);
        } else {
            printk(KERN_CRIT "Hangcheck: hangcheck value past margin!\n");
        }
    }

About the Author

Wim Peeters is electronics engineer with an additional master in IT and over 30 years of experience including time spent in support, development, consulting, training and database administration. Wim has worked with SQL Server since version 6.5. He has developed in C/C++, Java and C# on Windows and Linux in different European countries and different European languages. He writes knowledge base articles to solve IT problems and publishes them on the Lubby Knowledge Platform where he is one of the most important contributors and the main developer.

Disclaimer:

The information provided in this document is intended for your information only. Lubby makes no claims to the validity of this information. Use of this information is at own risk!