首先,內存泄漏。
當內存在子例程中分配時,通常會出現此問題。因此,當程序從子例程返回時,不會釋放內存。這樣,對已分配內存的引用將丟失,只要操作系統仍在運行,進程就會壹直使用該內存。
第二,C指針不對。
用C或C++編寫的程序(如Web服務器API模塊)可能會導致系統崩潰,因為只要間接引用指針出現錯誤,所有程序都會被操作系統終止。此外,使用錯誤C指針的Java模擬將訪問空對象引用。
第三,數據庫中沒有足夠的臨時表。
許多數據庫中臨時表的數量是固定的,臨時表是保存查詢結果的內存區域。臨時表中的所有數據都被讀取後,臨時表將被釋放,但大量的並發查詢可能會消耗所有固定數量的臨時表。此時,其他查詢需要排隊等待,直到壹個臨時表被釋放。
第四,線程死鎖
多線程帶來的性能提升是以犧牲可靠性為代價的,主要是因為它可能導致線程死鎖。當線程被死鎖時,第壹個線程等待第二個線程釋放資源,而第二個線程等待第壹個線程釋放資源。
第五,磁盤已滿。
系統無法正常運行的最可能原因是磁盤已滿。壹個好的網絡管理員會密切關註磁盤的使用情況,並定期將磁盤上的壹些負載轉移到備份存儲介質上。
第六,服務器過載。
NetscapeWeb服務器為每個連接使用壹個線程。NetscapeEnterpriseWeb服務器將在線程耗盡後掛起,而不為現有連接提供任何服務。