• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            大龍的博客

            常用鏈接

            統計

            最新評論

            cat /sys/hypervisor/uuid 阻塞

            摘要:此帶Xen的內核存在一個bug 能使cat /sys/hypervisor/uuid 阻塞,而使系統負載變高。
            rhels內核版本:2.6.18-164.el5


            1.現在已經證實這是rhels的一個bug,將這個bug進行較為深入的分析后,發現這個bug很有意思:
            事情的來龍去脈估計是這樣的:
                  先要從MCE說起。MCE(Machine Check Exception)是一類計算機硬件錯誤,它發生在當計算機的CPU偵測到硬件問題時。MicroSoft 的windows通常會以藍屏來顯示這類錯誤:
            STOP: 0x0000009C (0x00000004, 0x00000000, 0xB2000000, 0x00020151) "MACHINE_CHECK_EXCEPTION
            在Linux上,cpu通常會將這些信息寫到kernel log中,有些時候如果這些硬件問題不能得到修復的話也會將信息寫到控制臺上(console screen)如:
            CPU 0: Machine Check Exception: 0000000000000004 Bank 2: f200200000000863 Kernel panic: CPU context corrupt
                  以上顯示的這類信息都是一些16進制的地址,并不能給我們直觀的認識。怎樣對這信息解碼是一個很大的問題,當然我們可以去咨詢CPU廠商,或是閱讀他們的 文檔。
                  在Linux下有一款軟件mcelog(軟件地址為/usr/sbin/mcelog,日志地址為/var/log/mcelog)是專門用來對以上的錯 誤代碼進行解碼的(decode)。
                  接下來就說到問題的正題上了。我們知道rhels也是有可能運行在Xen虛擬環境下的,即作為DomainU來運行,這時就不需要去運行mcelog了, 因為它本身就在虛擬的硬件環境上,出了問題也是軟件虛擬的問題。從/etc/cron.hourly/mcelog.cron中可以看見系統開發者的意 圖:

            #!/bin/bash

            if [ -e /proc/xen ] && [ `cat /sys/hypervisor/uuid` != "00000000-0000-0000-0000-000000000000" ]; then
                # this is a PV Xen guest.  Do not run mcelog.
                exit 1;
            else
                /usr/sbin/mcelog --ignorenodev --filter >> /var/log/mcelog
            fi

                  系統開發者的意圖是好的。但是,在全部默認安裝rhels的時候,我們會將帶有xen的kernel安裝到機器上,而且此時的xend是不會自動啟動的, 即后面的`cat /sys/hypervisor/uuid`會阻塞。又由于這段代碼是寫在/etc/cron.hourly中所以就會出現大量的`cat /sys/hypervisor/uuid`阻塞,而這時系統的負載(根據負載的定義)自然就上去了。
                
            2.問題解決辦法
                  看完上面的分析,就知道怎么解決了。你可以將上面的關于PV Guest的監測代碼刪掉(現在的系統就是這么干的)。或是添加更加嚴格的監測代碼:
            #!/bin/sh
            xendstatus=`service xend status`
            if [ "$xendstatus"="xend is running" ]; then
                    if [ -e /proc/xen ] && [ `cat /sys/hypervisor/uuid` != "00000000-0000-0000-0000-000000000000" ]; then
                            # this is a PV Xen guest.  Do not run mcelog.
                            exit 1;
                    else
                            /usr/sbin/mcelog --ignorenodev --filter >> /var/log/mcelog
                    fi
            else
                    exit 1;
            fi
            或是有這樣的解決(基于半虛擬化的特點):
            if [ -e /proc/xen/capabilities ]; then
                #xen
                grep control_d /proc/xen/capabilities > & /dev/null
                if [$? -ne 0 ]; then
                    #domU -- do not run on xen PV guest
                    exit 1
                fi
            fi

            或者你不用帶用Xen的kernel來啟動系統。
            方法很多,任由你選吧。
             
            參考目錄:
            http://en.wikipedia.org/wiki/Machine_Check_Exception
            https://bugzilla.redhat.com/show_bug.cgi?id=225203

            posted on 2011-09-21 20:10 大龍 閱讀(656) 評論(1)  編輯 收藏 引用

            評論

            # re: cat /sys/hypervisor/uuid 阻塞 2011-12-25 10:57 劉華

            謝謝了,這篇文檔對我很有用,一樣的問題。  回復  更多評論   

            久久综合伊人77777| 久久无码国产| 激情伊人五月天久久综合| 亚洲精品乱码久久久久久| 无码人妻久久久一区二区三区| 伊人久久大香线蕉av一区| 国产一级做a爰片久久毛片| 久久国产精品无码网站| 亚洲国产一成人久久精品| 91久久成人免费| 精品人妻伦九区久久AAA片69| 99久久精品这里只有精品| 麻豆av久久av盛宴av| 国产精品99久久99久久久| 亚洲国产天堂久久久久久| 国产精品99久久99久久久| 久久毛片一区二区| 91精品免费久久久久久久久| 亚洲精品无码久久千人斩| 日批日出水久久亚洲精品tv| 久久97精品久久久久久久不卡| 最新久久免费视频| 久久免费视频6| 久久精品二区| 久久青青草原国产精品免费 | 久久最新免费视频| 国产欧美一区二区久久| 午夜天堂精品久久久久| 一本大道久久东京热无码AV| 国内精品久久久久久久影视麻豆 | 精品人妻伦九区久久AAA片69| 伊人久久无码中文字幕| 亚洲天堂久久久| 久久久久国色AV免费观看| 欧美日韩中文字幕久久伊人| 精品久久一区二区三区| 久久er热视频在这里精品| 久久精品成人免费看| 久久青青草原亚洲av无码app| 亚洲精品美女久久久久99| 久久久久久久久66精品片|