• <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 大龍 閱讀(653) 評論(1)  編輯 收藏 引用

            評論

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

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

            久久这里只精品国产99热| 欧美激情一区二区久久久| 国产一级做a爰片久久毛片| 久久91精品国产91久久麻豆| 久久成人国产精品二三区| 麻豆精品久久精品色综合| 尹人香蕉久久99天天拍| 国产精品无码久久综合| 亚洲精品无码久久久| 国产韩国精品一区二区三区久久| 日本免费久久久久久久网站| 国产精品久久久久久五月尺| 99精品久久精品| 亚洲人成无码网站久久99热国产 | 欧美久久综合性欧美| 要久久爱在线免费观看| 99久久免费国产精品热| 久久大香萑太香蕉av| 国产免费久久久久久无码| 综合人妻久久一区二区精品| 狠狠精品久久久无码中文字幕 | 久久精品国产第一区二区| 亚洲综合伊人久久大杳蕉| 久久青青国产| 日本久久久久久中文字幕| 狠狠色噜噜狠狠狠狠狠色综合久久| 精品久久久久久无码不卡| 久久精品无码av| 国产精品女同一区二区久久| 伊人久久亚洲综合影院| 亚洲伊人久久成综合人影院 | 久久久久久亚洲精品无码| 狠狠色狠狠色综合久久 | 久久亚洲sm情趣捆绑调教| 久久精品不卡| 国内精品久久久久久久久电影网| 久久免费视频一区| 久久夜色撩人精品国产小说| 四虎国产精品免费久久| 久久综合色老色| 日韩乱码人妻无码中文字幕久久|