linux系統(tǒng)的穩(wěn)定性記錄成為很多評論家們反對沖突不斷的windows系統(tǒng)的一個很好的武器。然而,linux系統(tǒng)的沖突問題雖然比較少,但是一旦在意想不到的情況下出現(xiàn),也很容易使人們陷入困境。學習一些常用手段來預防這些這些沖突問題的發(fā)生是十分重要的,它可以幫助linux的系統(tǒng)管理員們避免那些困境情況的出現(xiàn)?! ∫话阏J為,linux服務器系統(tǒng)是不存在沖突的,然而些許時候該系統(tǒng)的沖突、停滯問題的確存在。對于應用軟件層面的沖突或者停滯問題,與內(nèi)核層面有何不同呢? ?。恚幔颍搿。鳎椋欤洌椋睿纾骸密浖用娴臎_突或者停滯問題只是限制于一個特定的線程或者進程。這種沖突或者停滯問題不會導致在該相同系統(tǒng)上運行的其他線程或者進程的沖突或者停滯。然而,如果是在內(nèi)核層面上發(fā)生,那么它將影響到該系統(tǒng)中運行的所有進程?! ∠到y(tǒng)的沖突和停滯,這二者有什么區(qū)別呢? ?。洌幔睢。猓澹瑁恚幔睿骸≡谌魏我粋€層面,沖突和停滯這二者的屬性基本上是相同的。停滯發(fā)生在進程或線程受阻的時候,此時是由于某種鎖定或者某些硬件資源的繁忙,從而該進程或線程不得不等待。等待某些鎖定或資源的情況是經(jīng)常發(fā)生的,但是只有當這種鎖定或者資源最終無法實現(xiàn)的時候,才會引起系統(tǒng)停滯。 還有很重要的一點需要注意的是,停滯問題有時候可以提早的診斷出來。我的意思是,例如,某種資源的某個特定的時刻非常的繁忙,這是需要這種資源的進程或線程就需要等待非常長的一段時間,直至該資源空閑下來。用戶經(jīng)常不了解資源的這種繁忙狀況,而只看到該進程在等待,所以他就認為系統(tǒng)發(fā)生了停滯,但實際上此時系統(tǒng)仍然在按照既定的工作流程進行,只是速度比較慢?! 《到y(tǒng)的沖突問題與上述的停滯是不同的,它主要是由于某種不可知的硬件或軟件錯誤而導致的。當這種錯誤發(fā)生時,特殊的錯誤處理程序?qū)⒑芸赡軙{(diào)用那些診斷信息及報告,從而有希望能夠追蹤到這種錯誤的原因?! _突問題可以看作是某種致命的問題,它需要完結(jié)后才能夠進行分析。而停滯問題可以看作是實時的問題,它可以即時的進行分析、解決?! ∥抑溃欤椋睿酰幸粋€最大的優(yōu)勢就是在于它的源代碼的開放性;除此之外,還有別的原因致使linux比其他操作系統(tǒng)的沖突問題容易解決嗎? ?。猓澹瑁恚幔睿骸“殡S著這種源代碼的開放性,在linux系統(tǒng)的每一個層面都有著相當多的參閱文件。同時,既然源代碼是開放的,那么它的開發(fā)團隊也同樣是開放的。這樣以來,你就可以把所遇到的問題向linux內(nèi)核的開發(fā)者求助,當然包括最初的那些開發(fā)人員,甚至linus?。簦铮颍觯幔欤洌蟊救?,而這所有的求助程序也僅僅是發(fā)送一封電子郵件就可以了。而據(jù)我所知,linux的這種能力是那些不開放源碼的操作系統(tǒng)所缺少的?! √幚硗栴}有那些困難和挑戰(zhàn)呢? ?。鳎椋欤洌椋睿纾骸∫粋€應用軟件的停滯問題是有著多種原因的,也包括那些可能由于內(nèi)核空間的問題所引起的停滯。這意味著有時候這些問題不是開發(fā)者所能夠控制的。但是這正是linux的優(yōu)勢所在。所有的源代碼都是開放的,所以如果你遇到了某種進程的內(nèi)核阻滯狀況,那么就可以聯(lián)系其源代碼,從而查看該進程在內(nèi)核中是如何作用的。然而,在大部分情況下,是沒有必要進行這么深層次研究的。為了探究進程停滯的原因到底何在?應用軟件的開發(fā)者需要認真的研究這些軟件層面的狀況及證據(jù)(例如,堆棧的路徑等)?! τ谟脩艋蛘呔S護人員而言,他們一般不會了解應用軟件的具體工作程序,也不會沒有能力進入到源代碼層面進行測試,這是遇到系統(tǒng)停滯問題可以靈活的進行處理。例如,在某種情況下,進程a在等待進程b結(jié)束后所釋放的資源,而進程b又在等待進程a占有的資源。這就是所謂的“死鎖”,這也正是復雜應用軟件中經(jīng)常出現(xiàn)的問題,可以作為停滯問題的一種診斷方案?! ∪绻悴磺宄M程a及進程b的具體等待原因,那么你甚至不需要明白這到底是不是“死鎖”的情況,而別無選擇的關(guān)掉這兩個進程后重新開啟。正是這種類似情況,因此對于應用軟件而言,進行完全的資源及上鎖情況的跟蹤是十分重要的,這可以幫助解決這種比較棘手的問題?! 。猓澹瑁恚幔睿骸£P(guān)于停滯問題的另一個挑戰(zhàn)在于,當停滯問題發(fā)生時,進程或者線程經(jīng)常不知道它被停滯了或者何時將被停滯。這種情況和沖突問題是不同的,當沖突問題發(fā)生時,進程可以截取大部分的信號,并且信號處理程序可以添加到平臺系統(tǒng)中來處理這些特殊情況,例如清理內(nèi)存,堆棧跟蹤等等。但是,當停滯問題發(fā)生時,這種特殊的處理程序雖然不是完全不可能進行,但是往往比較靈活,不太固定?! ⊥栴}發(fā)生時,往往去重新啟動該系統(tǒng)或者應用軟件。有一點需要切記的是,發(fā)生停滯問題時,診斷該問題的一些資料和證據(jù)經(jīng)常被活動的內(nèi)核及應用軟件所捕獲。如