1、如果伺服器空間有限,死鎖應該怎麼避免
Java線程死鎖需要如何解決,這個問題一直在我們不斷的使用中需要只有不斷的關鍵。不幸的是,使用上鎖會帶來其他問題。讓我們來看一些常見問題以及相應的解決方法: Java線程死鎖 Java線程死鎖是一個經典的多線程問題,因為不同的線程都在等待那些根本不可能被釋放的鎖,從而導致所有的工作都無法完成。假設有兩個線程,分別代表兩個飢餓的人,他們必須共享刀叉並輪流吃飯。他們都需要獲得兩個鎖:共享刀和共享叉的鎖。 假如線程 「A」獲得了刀,而線程「B」獲得了叉。線程「A」就會進入阻塞狀態來等待獲得叉,而線程「B」則阻塞來等待「A」所擁有的刀。這只是人為設計的例子,但盡管在運行時很難探測到,這類情況卻時常發生。雖然要探測或推敲各種情況是非常困難的,但只要按照下面幾條規則去設計系統,就能夠避免Java線程死鎖問題: 讓所有的線程按照同樣的順序獲得一組鎖。這種方法消除了 X 和 Y 的擁有者分別等待對方的資源的問題。 將多個鎖組成一組並放到同一個鎖下。前面Java線程死鎖的例子中,可以創建一個銀器對象的鎖。於是在獲得刀或叉之前都必須獲得這個銀器的鎖。 將那些不會阻塞的可獲得資源用變數標志出來。當某個線程獲得銀器對象的鎖時,就可以通過檢查變數來判斷是否整個銀器集合中的對象鎖都可獲得。如果是,它就可以獲得相關的鎖,否則,就要釋放掉銀器這個鎖並稍後再嘗試。 最重要的是,在編寫代碼前認真仔細地設計整個系統。多線程是困難的,在開始編程之前詳細設計系統能夠幫助你避免難以發現Java線程死鎖的問題。 Volatile 變數,volatile 關鍵字是 Java 語言為優化編譯器設計的。以下面的代碼為例: 1.class VolatileTest {
2.public void foo() {
3.boolean flag = false;
4.if(flag) {
5.//this could happen
6.}
7.}
8.} 一個優化的編譯器可能會判斷出if部分的語句永遠不會被執行,就根本不會編譯這部分的代碼。如果這個類被多線程訪問, flag被前面某個線程設置之後,在它被if語句測試之前,可以被其他線程重新設置。用volatile關鍵字來聲明變數,就可以告訴編譯器在編譯的時候,不需要通過預測變數值來優化這部分的代碼。 無法訪問的Java線程死鎖有時候雖然獲取對象鎖沒有問題,線程依然有可能進入阻塞狀態。在 Java 編程中IO就是這類問題最好的例子。當線程因為對象內的IO調用而阻塞時,此對象應當仍能被其他線程訪問。該對象通常有責任取消這個阻塞的IO操作。造成阻塞調用的線程常常會令同步任務失敗。如果該對象的其他方法也是同步的,當線程被阻塞時,此對象也就相當於被冷凍住了。 其他的線程由於不能獲得對象的Java線程死鎖,就不能給此對象發消息(例如,取消 IO 操作)。必須確保不在同步代碼中包含那些阻塞調用,或確認在一個用同步阻塞代碼的對象中存在非同步方法。盡管這種方法需要花費一些注意力來保證結果代碼安全運行,但它允許在擁有對象的線程發生阻塞後,該對象仍能夠響應其他線程。 編輯推薦: 1. Java多線程優化之偏向鎖原理分析 2. Java多線程實現非同步調用的方法 3. 使用Java多線程機制實現下載的方法介紹
2、伺服器死鎖的原因是什麼呀
幫你找到了,雖然我也不懂這方面的知識
但是相信你看完以後就會明白了
http://203.208.35.101/search?q=cache:Rp7MAD6Sfr8J:www.dc9.cn/post/IISAspDeadLock.html+%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%AD%BB%E9%94%81%E7%9A%84%E5%8E%9F%E5%9B%A0%E6%98%AF&hl=zh-CN&ct=clnk&cd=9&gl=cn&client=aff-os-maxthon&st_usg=
3、求助伺服器崩潰原因和解決方法
在計算機網路日益普及的今天,計算機安全不但要求防治計算機病毒,而且要提高系統抵抗黑客非法入侵的能力,還要提高對遠程數據傳輸的保密性,避免在傳輸途中遭受非法竊取。下面壹基比小喻來給你們講講伺服器託管站點崩潰的幾大原因。
第一,內存泄漏
C/C++程序還可能產生另一個指針問題:丟失對已分配內存的引用。當內存是在子程序中被分 配時,通常會出現這種問題,其結果是程序從子程序中返回時不會釋放內存。如此一來,對已分配的內存的引用就會丟失,只要操作系統還在運行中,則進程就會一 直使用該內存。這樣的結果是,曾佔用更多的內存的程序會降低系統性能,直到機器完全停止工作,才會完全清空內存。
第二,C指針錯誤
用C或C++編寫的程序,如Web伺服器API模塊,有可能導致系統的崩潰,因為只要間接引 用指針(即,訪問指向的內存)中出現一個錯誤,就會導致操作系統終止所有程序。另外,使用了糟糕的C指針的Java模擬量(analog)將訪問一個空的 對象引用。Java中的空引用通常不會導致立刻退出JVM,但是前提是程序員能夠使用異常處理方法恰當地處理錯誤。在這方面,Java無需過多的關注,但 使用Java對可靠性進行額外的度量則會對性能產生一些負面影響。
第三,資料庫中的臨時表不夠用
許多資料庫的臨時表(cursor)數目都是固定的,臨時表即保留查詢結果的內存區域。在臨時表中的數據都被讀取後,臨時表便會被釋放,但大量同時進行的查詢可能耗盡數目固定的所有臨時表。這時,其他的查詢就需要列隊等候,直到有臨時表被釋放時才能再繼續運行。
第四,線程死鎖
由多線程帶來的性能改善是以可靠性為代價的,主要是因為這樣有可能產生線程死鎖。線程死鎖 時,第一個線程等待第二個線程釋放資源,而同時第二個線程又在等待第一個線程釋放資源。我們來想像這樣一種情形:在人行道上兩個人迎面相遇,為了給對方讓 道,兩人同時向一側邁出一步,雙方無法通過,又同時向另一側邁出一步,這樣還是無法通過。雙方都以同樣的邁步方式堵住了對方的去路。假設這種情況一直持續 下去,這樣就不難理解為何會發生死鎖現象了。
第五,磁碟已滿
導致系統無法正常運行的最可能的原因是磁碟已滿。一個好的網路管理員會密切關注磁碟的使用情況,隔一定的時間,就需要將磁碟上的一些負載轉存到備份存儲介質中(例如磁帶)。
日誌文件會很快用光所有的磁碟空間。Web伺服器的日誌文件、SQL*Net的日誌文件、 JDBC日誌文件,以及應用程序伺服器日誌文件均與內存泄漏有同等的危害。可以採取措施將日誌文件保存在與操作系統不同的文件系統中。日誌文件系統空間已 滿時Web伺服器也會被掛起,但機器自身被掛起的幾率已大大減低。
第六,伺服器超載
Netscape Web伺服器的每個連接都使用一個線程。Netscape Enterprise Web伺服器會在線程用完後掛起,而不為已存在的連接提供任何服務。如果有一種負載分布機制可以檢測到伺服器沒有響應,則該伺服器上的負載就可以分布到其 它的Web伺服器上,這可能會致使這些伺服器一個接一個地用光所有的線程。這樣一來,整個伺服器組都會被掛起。操作系統級別可能還在不斷地接收新的連接, 而應用程序(Web伺服器)卻無法為這些連接提供服務。用戶可以在瀏覽器狀態行上看到connected(已連接)的提示消息,但這以後什麼也不會發生。
總之,還有許多因素也極有可能導致伺服器租用或伺服器託管站點無法工作。有許多種原因可能導致Web站點無法正常工作,這使得系統地檢查所有問題變得很困難。
4、tcpip中,伺服器死鎖有哪些原因
Java線程死鎖需要如何解決,這個問題一直在我們不斷的使用中需要只有不斷的關鍵。不幸的是,使用上鎖會帶來其他問題。讓我們來看一些常見問題以及相應的解決方法: Java線程死鎖 Java線程死鎖是一個經典的多線程問題,因為不同的線程都在等待那些根本不可能被釋放的鎖,從而導致所有的工作都無法完成。假設有兩個線程,分別代表兩個飢餓的人,他們必須共享刀叉並輪流吃飯。他們都需要獲得兩個鎖:共享刀和共享叉的鎖。 假如線程 「A」獲得了刀,而線程「B」獲得了叉。線程「A」就會進入阻塞狀態來等待獲得叉,而線程「B」則阻塞來等待「A」所擁有的刀。這只是人為設計的例子,但盡管在運行時很難探測到,這類情況卻時常發生。雖然要探測或推敲各種情況是非常困難的,但只要按照下面幾條規則去設計系統,就能夠避免Java線程死鎖問題: 讓所有的線程按照同樣的順序獲得一組鎖。這種方法消除了 X 和 Y 的擁有者分別等待對方的資源的問題。 將多個鎖組成一組並放到同一個鎖下。前面Java線程死鎖的例子中,可以創建一個銀器對象的鎖。於是在獲得刀或叉之前都必須獲得這個銀器的鎖。 將那些不會阻塞的可獲得資源用變數標志出來。當某個線程獲得銀器對象的鎖時,就可以通過檢查變數來判斷是否整個銀器集合中的對象鎖都可獲得。如果是,它就可以獲得相關的鎖,否則,就要釋放掉銀器這個鎖並稍後再嘗試。 最重要的是,在編寫代碼前認真仔細地設計整個系統。多線程是困難的,在開始編程之前詳細設計系統能夠幫助你避免難以發現Java線程死鎖的問題。 Volatile 變數,volatile 關鍵字是 Java 語言為優化編譯器設計的。以下面的代碼為例: 1.class VolatileTest {
2.public void foo() {
3.boolean flag = false;
4.if(flag) {
5.//this could happen
6.}
7.}
8.} 一個優化的編譯器可能會判斷出if部分的語句永遠不會被執行,就根本不會編譯這部分的代碼。如果這個類被多線程訪問, flag被前面某個線程設置之後,在它被if語句測試之前,可以被其他線程重新設置。用volatile關鍵字來聲明變數,就可以告訴編譯器在編譯的時候,不需要通過預測變數值來優化這部分的代碼。 無法訪問的Java線程死鎖有時候雖然獲取對象鎖沒有問題,線程依然有可能進入阻塞狀態。在 Java 編程中IO就是這類問題最好的例子。當線程因為對象內的IO調用而阻塞時,此對象應當仍能被其他線程訪問。該對象通常有責任取消這個阻塞的IO操作。造成阻塞調用的線程常常會令同步任務失敗。如果該對象的其他方法也是同步的,當線程被阻塞時,此對象也就相當於被冷凍住了。 其他的線程由於不能獲得對象的Java線程死鎖,就不能給此對象發消息(例如,取消 IO 操作)。必須確保不在同步代碼中包含那些阻塞調用,或確認在一個用同步阻塞代碼的對象中存在非同步方法。盡管這種方法需要花費一些注意力來保證結果代碼安全運行,但它允許在擁有對象的線程發生阻塞後,該對象仍能夠響應其他線程。 編輯推薦: 1. Java多線程優化之偏向鎖原理分析 2. Java多線程實現非同步調用的方法 3. 使用Java多線程機制實現下載的方法介紹
5、伺服器出現崩潰是什麼原因呢?
第一,內存泄漏
CC+程序還可能產生另一個指針問題丟失對已分配內存的引用。當內存是在子程序中被分配時,通常會出現這種問題,其結果是程序從子程序中返回時不會釋放內存。如此一來,對已分配的內存的引用就會丟失,只要操作系統還在運行中,則進程就會一直使用該內存。
這樣的結果是,曾佔用更多的內存的程序會降低系統性能,直到機器完全停止工作,才會完全請空內存。
第二, C指針錯誤
用C或C++編寫的程序,如Web伺服器APT模塊,有可能導致系統的崩潰,因為只要間接引用指針(即,訪問指向的內存)中出現一個錯誤,就會導致操作系統終止所有程序。另外,使用了糟糕的C指針的Java模擬量(analog)將訪問一個空的對象引用。Java中的空引用通常不會導致立刻退出JVM,但是前提是程序員能夠使用異常處理方法恰當地處理錯誤。在這方面, Java無需過多的關注,但使用Java對可靠性進行額外的度量則會對性能產生一些負面影響。
第三,資料庫中的臨時表不夠用
許多資料庫的臨時表(cursor)數目都是固定的,臨時表即保留查詢結果的內存區域。在臨時表中的數據都被讀取後,臨時表便會被釋放,但大量同時進行的查詢可能耗盡數目固定的所有臨時表。這時,其他的查詢就需要列隊等候,直到有臨時表被釋放時才能再繼續運行。
第四,線程死鎖
由多線程帶來的性能改善是以可靠性為代價的,主要是因為這樣有可能產生線程死鎖。線程死鎖時,第一個線程等待第二個線程釋放資源,而同時第二個線程又在等待第一個線程釋放資源。我們來想像這樣一種情形在人行道上兩個人迎面相遇,為了給對方讓道,兩人同時向一側邁出一步,雙方無法通過,又同時向另一側邁出一步,這樣還是無法通過。雙方都以同樣的邁步方式堵住了對方的去路。假設這種情況一直持續下去,這樣就不難理解為何會發生死鎖現象了。
第五,磁碟已滿
導致系統無法正常運行的最可能的原因是磁碟已滿。一個好的網路管理員會密切關注磁碟的使用情況,隔一定的時間,就需要將磁碟上的一些負載妹存到備份存儲介質中(例如磁帶)。
日誌文件會很快用光所有的磁碟空間。Web伺服器的日誌文件、SQLet的日誌文件、JDBC日誌文件,以及應用程序伺服器日誌文件均與內存泄漏有同等的危害。可以採取措施將日誌文件保存在與操作系統不同的文件系統中。日誌文件系統空間已滿時web伺服器也會被掛起,但機器自身被掛起的幾率已大大減低。
第六,伺服器超載
Netscape Web伺服器的每個連接都使用一個線程。Netscape Enterprise Web伺服器會在線程用完後掛起,而不為已存在的連接提供任何服務。如果有一種負載分布機制可以檢測到伺服器沒有響應,則該伺服器上的負載可以分布到其它的Web伺服器上,這可能會致使這些伺服器一個接一個地用光所有的線程。這樣一來,整個伺服器組都會被掛起。操作系統級別可能還在不斷地接收新的連接, 而應用程序(Web伺服器卻無法為這些連接提供服務。用戶可以在瀏覽器狀態行上看到connected(已連接)的提示消息,但這以後什麼也不會發生。
6、伺服器崩潰會有怎麼樣?
第一,內存泄漏
當內存是在子程序中被分 配時,通常會出現這種問題,其結果是程序從子程序中返回時不會釋放內存。如此一來,對已分配的內存的引用就會丟失,只要操作系統還在運行中,則進程就會一 直使用該內存。
第二,C指針錯誤
用C或C++編寫的程序,如Web伺服器API模塊,有可能導致系統的崩潰,因為只要間接引 用指針中出現一個錯誤,就會導致操作系統終止所有程序。另外,使用了糟糕的C指針的Java模擬量將訪問一個空的對象引用。
第三,資料庫中的臨時表不夠用
許多資料庫的臨時表數目都是固定的,臨時表即保留查詢結果的內存區域。在臨時表中的數據都被讀取後,臨時表便會被釋放,但大量同時進行的查詢可能耗盡數目固定的所有臨時表。這時,其他的查詢就需要列隊等候,直到有臨時表被釋放時才能再繼續運行。
4
第四,線程死鎖
由多線程帶來的性能改善是以可靠性為代價的,主要是因為這樣有可能產生線程死鎖。線程死鎖時,第一個線程等待第二個線程釋放資源,而同時第二個線程又在等待第一個線程釋放資源。
5
第五,磁碟已滿
導致系統無法正常運行的最可能的原因是磁碟已滿。一個好的網路管理員會密切關注磁碟的使用情況,隔一定的時間,就需要將磁碟上的一些負載轉存到備份存儲介質中。
6
第六,伺服器超載
Netscape Web伺服器的每個連接都使用一個線程。Netscape Enterprise Web伺服器會在線程用完後掛起,而不為已存在的連接提供任何服務。
你可以嘗試換一個伺服器,我們這邊很多用的都是禾禾穀數據的伺服器,質量好還實惠,推薦你試試看。
7、更換伺服器後系統死鎖嚴重,完全不知道怎麼搞
把資料庫文件直接拷貝過來來的,我還重新做了索引。
死鎖的語句太多了,有的 一條簡單查詢就死在那裡半天
8、伺服器經常崩潰是怎麼回事?
第一,內存泄漏
C/C++程序還可能產生另一個指針問題:丟失對已分配內存的引用。當內存是在子程序中被分 配時,通常會出現這種問題,其結果是程序從子程序中返回時不會釋放內存。如此一來,對已分配的內存的引用就會丟失,只要操作系統還在運行中,則進程就會一 直使用該內存。這樣的結果是,曾佔用更多的內存的程序會降低系統性能,直到機器完全停止工作,才會完全清空內存。
第二,C指針錯誤
用C或C++編寫的程序,如Web伺服器API模塊,有可能導致系統的崩潰,因為只要間接引 用指針(即,訪問指向的內存)中出現一個錯誤,就會導致操作系統終止所有程序。另外,使用了糟糕的C指針的Java模擬量(analog)將訪問一個空的 對象引用。Java中的空引用通常不會導致立刻退出JVM,但是前提是程序員能夠使用異常處理方法恰當地處理錯誤。在這方面,Java無需過多的關注,但 使用Java對可靠性進行額外的度量則會對性能產生一些負面影響。
第三,資料庫中的臨時表不夠用
許多資料庫的臨時表(cursor)數目都是固定的,臨時表即保留查詢結果的內存區域。在臨時表中的數據都被讀取後,臨時表便會被釋放,但大量同時進行的查詢可能耗盡數目固定的所有臨時表。這時,其他的查詢就需要列隊等候,直到有臨時表被釋放時才能再繼續運行。
第四,線程死鎖
由多線程帶來的性能改善是以可靠性為代價的,主要是因為這樣有可能產生線程死鎖。線程死鎖 時,第一個線程等待第二個線程釋放資源,而同時第二個線程又在等待第一個線程釋放資源。我們來想像這樣一種情形:在人行道上兩個人迎面相遇,為了給對方讓 道,兩人同時向一側邁出一步,雙方無法通過,又同時向另一側邁出一步,這樣還是無法通過。雙方都以同樣的邁步方式堵住了對方的去路。假設這種情況一直持續 下去,這樣就不難理解為何會發生死鎖現象了。
第五,磁碟已滿
導致系統無法正常運行的最可能的原因是磁碟已滿。一個好的網路管理員會密切關注磁碟的使用情況,隔一定的時間,就需要將磁碟上的一些負載轉存到備份存儲介質中(例如磁帶)。
日誌文件會很快用光所有的磁碟空間。Web伺服器的日誌文件、SQL*Net的日誌文件、 JDBC日誌文件,以及應用程序伺服器日誌文件均與內存泄漏有同等的危害。可以採取措施將日誌文件保存在與操作系統不同的文件系統中。日誌文件系統空間已 滿時Web伺服器也會被掛起,但機器自身被掛起的幾率已大大減低。
第六,伺服器超載
Netscape Web伺服器的每個連接都使用一個線程。Netscape Enterprise Web伺服器會在線程用完後掛起,而不為已存在的連接提供任何服務。如果有一種負載分布機制可以檢測到伺服器沒有響應,則該伺服器上的負載就可以分布到其 它的Web伺服器上,這可能會致使這些伺服器一個接一個地用光所有的線程。這樣一來,整個伺服器組都會被掛起。操作系統級別可能還在不斷地接收新的連接, 而應用程序(Web伺服器)卻無法為這些連接提供服務。用戶可以在瀏覽器狀態行上看到connected(已連接)的提示消息,但這以後什麼也不會發生。
總之,還有許多因素也極有可能導致Web香港伺服器租用或香港伺服器託管站點無法工作。有許多種原因可能導致Web站點無法正常工作,這使得系統地檢查所有問題變得很困難。
9、為什麼會有伺服器崩掉這一說法?
伺服器就是一個流量匯入的,一個處理中心,但在某一時間段,這種流量接入超過伺服器設計,流量接入的一個復合之後,就會引起伺服器崩掉