In the function calls in Example 2-146 on page 181, the  doLaunch()  and  doNonBlockingWait()  methods are the dominant occurrences in each block. The  doLaunch() call shows up first, and then follows the  doNonBlockingWait()  call. This sequence pattern of  log records is noticed repeatedly in the steady state normal operation of the test application  app1 .  With  app1  application monitoring that is activated in this way, we examined repeatedly the  AME thread stack that is shown in Example 2-147. In all our captures, the thread showed up  in the  doSleep()  call under the  doMainLoop()  call, which suggests that the AME thread stays  most of the time in this sleep mode, and the other method calls showing up as logging  records in the AME log show up in the stack for such short periods that we can hardly capture  them. Example 2-147 Checking repeatedly the AME thread stack [vmraix1:root:/home/root:] while true; do procstack 5964236|sed '/(pthread ID: 258) ----------/,$!d'; sleep 2; done ---------- tid# 10289421 (pthread ID: 258) ---------- 0xd057a534 _event_sleep(??, ??, ??, ??, ??, ??) + 0x4f4 0xd057b21c _event_wait(??, ??) + 0x35c 0xd058abd8 _cond_wait_local(??, ??, ??) + 0x4b8 0xd058b1d4 _cond_wait(??, ??, ??) + 0x34 0xd058b860 pthread_cond_timedwait(??, ??, ??) + 0x200 0x102632cc AppsMngt::doSleep(timespec&)(??, ??) + 0x6c 0x1024745c AppsMngt::doMainLoop()(??) + 0x7c 0x100ed1ec AppsMngt::threadMain()(??) + 0x12c 0x102d02d0 Runnable::runThread(void*)(??) + 0x30 0xd0565f64 _pthread_body(??) + 0xe4 ^C[vmraix1:root:/home/root:] In Example 2-148 through Example 2-154 on page 185, we extracted excerpts from the AME  log by using the called method and the line code details fields only for the first  7 seconds from the start of our normal steady state scenario. AME uses its own counter for  these rounds, starting from a  0  value, and is logging this counter value each time as a first  action when entering the  doLaunch()  method. The  doLaunch()  method also logs a high  precision decimal time stamp at this moment. The round counter is initialized to zero at each  VMM start. Example 2-148 Round 0: One application normal steady state scenario [vmraix1:root:/var/ksys/log:] grep "08/31/19-16:22:01" ksys_vmm_ame.log|sed  '/doLaunch/,$!d'|while read lglvl pid tid ts method rest; do a=${method##*:}; b=${a%%\(*}; echo  "${b}() :${rest#*\]}"; done doLaunch() : AME counter is 0 (at 3624862.469372535). List of 1 app uuid managed is  "1567267349133928000". doLaunch() : For app "1567267349133928000": this application monitoring was already active. dependencyCheck() : Dependency list is empty doLaunch() : For app "1567267349133928000": application script "/tmp/HA/app1_mon.sh" being  forked ! pidParent(5570942) forks pidChild(6291810). doLaunch() : For app "1567267349133928000": computing time of timeout by adding xmlAppTimeout(3)  to appEntry.m_timeScriptTimeoutAt => 3624865.469372535. doLaunch() : Synthesis: list of 1 processes forked during this loop is  "(uuid=1567267349133928000;monitor;/tmp/HA/app1_mon.sh) ". doNonBlockingWait() : AME waiting for 1 script(s) (at 3624862.470544447). doNonBlockingWait() : +Synthesis of all (1) applications: 182  Implementing IBM VM Recovery Manager for IBM Power Systems