檢測伺服器資料庫崩潰
Ⅰ 導致伺服器不穩定的主要原因有哪些
伺服器不穩定的主要原因:
一:本地網路問題
如果我們在訪問網站的時候突然發現很慢,很卡。我們首先要做的就是檢查一下自身本地的網路環境是不是有問題。可以利用ping一下已知的知名域名,ping值出來之後,如果ping值很大,則可能是自己本地的網路環境有問題。反之ping值小,則是美國伺服器出現問題了。
二:所在機房問題
網站載入速度過慢時,如果確認本地網路沒有問題,還有可能是問題出現在美國伺服器所在機房,機房的設備是完善的,但是也不能避免機房出現異常。當機房受到惡意攻擊的時候,也會導致美國伺服器變慢。另外也要檢查一下機房的主幹網路是否有異常。如果美國伺服器託管了,那麼我們可以聯系機房的運維人員排查一下什麼問題,推薦相關閱讀:選擇美國伺服器應該注意哪些事項
三:運營商國際路由問題
當我們所使用的網路,運行商的路由或者提供的服務出現問題也會導致美國伺服器變慢。特別是我們使用國外美國伺服器的用戶會經常遇到這類問題。當數據在傳輸的過程中,出現丟包或者無法連接路由時,用到這類網線的美國伺服器速度就會很慢。這種情況並不是美國伺服器本身出現問題,也不是本地網路出現問題,只需要等運營商修復網路即可。
四:資源不足和美國伺服器中毒
我們要知道當美國伺服器剩餘空間不足時,會導致程序在運行的時候cpu或者內存過載,導致美國伺服器速度變慢。遇到這類問題,我們可以嘗試優化系統,關閉美國伺服器上沒必要運行的軟體和程序。如果此類事件經常發生,那麼我們就應該要升級美國伺服器的整體配置了。另外,美國伺服器如果遭受到惡意攻擊也會導致美國伺服器變慢。所以我們選擇美國伺服器的防火牆和所在機房的安全防護級別也是至關重要的。
Ⅱ 網站宕機 伺服器宕機 資料庫宕機 宕機怎麼辦
最近遇到個比較有意思的問題,伺服器宕掉後無法啟動,想了好多辦法,雖然解決了問題,數據沒有丟失,但是沒有按照自已的思路來,未免還是有些不甘。遇到問題不能慌,尤其是線上的環境,更不能緊張,心理素質對DBA來說也是一項挑戰,可能你的手一抖就會導致多少人無法正常使用業務,如果你沒有把握,請先把現場環境備份後再進行操作,避免數據的二次損壞,下面壹基比小喻說一下大概的思路吧。
1.檢查是否有備份,如果備份存在,binlog存在,那麼萬事大吉,一切都有挽回的餘地,慢慢來搞,只要你基礎扎實,數據還原只是時間的問題。
2.對於沒有備份的,那處理這個問題就有些棘手了,還得一步一步的來。
在my.cnf中[mysqld]下加上以下配置,採用強制恢復機制,看是否能夠啟動
[mysqld]
innodb_force_recovery=1
如果設置成1不能啟動,可以逐漸的將數據增大到6,下文會詳細說下1-6是什麼意思,如果在1-6之間啟動成功了,那麼你運氣還不錯,這時候不要恢復業務,趕緊把數據用邏輯方式導出來,再啟個新的實例把數據還原,有人會問,為什麼mysql已經啟動了,還要導出數據呢,原因在這:
當innodb_force_recovery被設置為大於0的時候 ,會阻止用戶insert,update,delete也就是你啟動的mysql不是一個正常的mysql服務,類似於windows系統下的安全模式。以下這段引於其它地方,具體地址不太清楚了,也可以從官方文檔中找到。
innodb_force_recovery被允許的非零值如下。一個更大的數字包含所有更小數字的預防措施。如果你能夠用一個多數是4的選項值來轉儲你的表,那麼你是比較安全的,只有一些在損壞的單獨頁面上的數據會丟失。一個為6的值更誇張,因為資料庫頁被留在一個陳舊的狀態,這個狀態反過來可以引發對B樹和其它資料庫結構的更多破壞。
innodb_force_recovery=1 (SRV_FORCE_IGNORE_CORRUPT)
即使伺服器檢測到一個損壞的頁,也讓伺服器運行著;試著讓SELECT * FROM tbl_name 跳過損壞的索引記錄和頁,這樣有助於轉儲表。
innodb_force_recovery=2 (SRV_FORCE_NO_BACKGROUND)
阻止主線程運行,如果崩潰可能在凈化操作過程中發生,這將阻止它。
innodb_force_recovery=3 (SRV_FORCE_NO_TRX_UNDO)
恢復後不運行事務回滾。
innodb_force_recovery=4 (SRV_FORCE_NO_IBUF_MERGE)
也阻止插入緩沖合並操作。如果你可能會導致一個崩潰。最好不要做這些操作,不要計算表統計表。
innodb_force_recovery=5 (SRV_FORCE_NO_UNDO_LOG_SCAN)
啟動資料庫之時不查看未完成日誌:InnoDB把未完成的事務視為已提交的。
innodb_force_recovery=6 (SRV_FORCE_NO_LOG_REDO)
不要在恢復連接中做日誌前滾。
資料庫不能另外地帶著這些選項中被允許的選項來使用。作為一個安全措施,當innodb_force_recovery被設置為大於0的值時,InnoDB阻止用戶執行INSERT, UPDATE或DELETE操作.
即使強制恢復被使用,你也可以DROP或CREATE表。如果你知道一個給定的表正在導致回滾崩潰,你可以移除它。你也可以用這個來停止由失敗的大宗導入或失敗的ALTER TABLE導致的失控回滾。你可以殺掉mysqld進程,然後設置innodb_force_recovery為3,使得資料庫被掛起而不需要回滾,然後舍棄導致失控回滾的表。
關於上面進行邏輯備份也可能會遇到問題,可能會備份失敗,如果出錯,建議先按庫一個一個的備份,到哪個庫出錯後,再按照當前庫的表一個一個備份,表出錯根據表中主鍵一點一點備份,最終將大部分數據導出。如果你的數據不重要,可以容忍丟失,那麼可以當我說的都是廢話了。
3.如果還是不可以啟動,那麼恭喜你,你遇到挑戰了。
查看錯誤日誌,看沒有提示因為某個表的原因而導致啟動不了,可以先把損壞的表的ibd文件先從數據目錄mv走,再試著啟動,在數據已經恢復後,我把當時錯誤的文件拿到本地,做了測試,把幾個報錯的ibd文件mv走後,資料庫就可以正常啟動了,但是mv走的這幾個表數據會丟失。怎麼把這個表的數據弄回來呢,曾想過用在線表空間傳輸,但是.cfg文件卻沒有,這種方法沒有行通。後來用Percona Data Recovery Tool for InnoDB工具進行數據恢復,關於這個工具的介紹與操作,網上一大堆,我就不詳細說明了。
Ⅲ 伺服器經常崩潰是怎麼回事
伺服器崩潰的幾種原因第一:高並發流量或請求超過伺服器承受力
無論是企業和個人在租用伺服器的時候都會受到峰值承受限制的,一旦超過伺服器的承受能力,就會導致伺服器癱瘓,應用程序暫停,網站無法訪問。伺服器都是有峰值限制的,不可能承受無上限的並發能力。而造成伺服器癱瘓的原因就是在同一段時間內,訪問人數多,造成高流量的突進。超出了伺服器的承受范圍。這種例子我們經常可以看到,比如雙11期間,很多公司為了應對雙11的高流量,開啟的緊急避險措施和大規模的伺服器負載能力。還有春運期間,12306網站由於受到高並發的問題,也會頻繁的出現崩潰。
第二:磁碟空間不足
導致伺服器無法正常運行的原因也有可能是磁碟空間溢出導致的。企業的網路管理員應該實時關注磁碟的使用情況,並且要在規定的時間把磁碟儲存的數據備份到另外的存儲設備裡面,確保數據無遺失,推薦相關閱讀:哪些網站應該使用伺服器呢?
伺服器的磁碟大部分的資源都是被日誌文件佔用了,包括web伺服器,資料庫等日誌信息都包括其中,以及應用程序伺服器日誌文件均與內存泄漏是同等的危害。我們可以採取措施保護我們的數據和日誌文件,日誌文件對應用程序進行異地存儲。日誌文件系統空間如果滿了,則web伺服器將自動被掛起,但是機器本身癱瘓和宕機的幾率就會大大降低。
第三:伺服器超載
連接web伺服器都是用一個線程鏈接的,web伺服器會在線程用過之後自動掛起,不會再未已鏈接的線程提供任何服務。如果我們用了負載機制,那麼如果該伺服器沒有響應,則該伺服器的負載則會自動的轉移到其他web伺服器上,這個操作會使伺服器一個接一個的用光線程。這中操作可能會導致整個伺服器機組被掛起,操作系統同時還有可能在不斷接收新的鏈接,而我們的web伺服器無法未其提供服務,致使伺服器崩潰。
第四:伺服器遭到惡意攻擊
網路科技的不斷發展同時,黑客的技術和滲透也是很強的,伺服器和系統遭受到攻擊已經是普遍存在的了。所有伺服器都會面臨這個問題,這個是無法預測的危險,我們只能實時做好安全防護,將被攻擊的風險降至最低。
Ⅳ 如何解決資料庫崩潰,數據丟失
您好,很高興為您解答,
這基本上是不可能的,我是說伺服器崩潰,游戲數據保存的伺服器數據應該是雲分布式的,不可能所有伺服器同一時間全部崩潰吧,真要出現這情況了,游戲公司也該關門了。
玩家數據丟失,需要你拿出證據的,游戲公司都這樣,可以說有點官僚主義,丟了東西算玩家的,得了東西還得追究你的來路,稍有不慎,裝備什麼的可能還會被收回!
如果我的回答沒幫助到您,請繼續追問。
Ⅳ 伺服器奔潰了,是被cc攻擊了嗎怎麼解決
CC主要是用來攻擊頁面的。就是在訪問論壇時,如果這個論壇比較大,訪問的人比較多,打開頁面的速度會比較慢,對不?!一般來說,訪問的人越多,論壇的頁面越多,資料庫就越大,被訪問的頻率也越高,佔用的系統資源也就相當可觀,現在知道為什麼很多空間服務商都說大家不要上傳論壇,聊天室等東西了吧。
一個靜態頁面不需要伺服器多少資源,甚至可以說直接從內存中讀出來發給你就可以了,但是論壇就不一樣了,我看一個帖子,系統需要到資料庫中判斷我是否有讀讀帖子的許可權,如果有,就讀出帖子裡面的內容,顯示出來——這里至少訪問了2次資料庫,如果資料庫的體積有200MB大小,系統很可能就要在這200MB大小的數據空間搜索一遍,這需要多少的CPU資源和時間?如果我是查找一個關鍵字,那麼時間更加可觀,因為前面的搜索可以限定在一個很小的范圍內,比如用戶許可權只查用戶表,帖子內容只查帖子表,而且查到就可以馬上停止查詢,而搜索肯定會對所有的數據進行一次判斷,消耗的時間是相當的大。
CC就是充分利用了這個特點,模擬多個用戶(多少線程就是多少用戶)不停的進行訪問(訪問那些需要大量數據操作,就是需要大量CPU時間的頁面)。很多朋友問到,為什麼要使用代理呢?因為代理可以有效地隱藏自己的身份,也可以繞開所有的防火牆,因為基本上所有的防火牆都會檢測並發的TCP/IP連接數目,超過一定數目一定頻率就會被認為是Connection-Flood。
使用代理攻擊還能很好的保持連接,我們這里發送了數據,代理幫我們轉發給對方伺服器,我們就可以馬上斷開,代理還會繼續保持著和對方連接(我知道的記錄是有人利用2000個代理產生了35萬並發連接)。
可能很多朋友還不能很好的理解,我來描述一下吧。我們假設伺服器A對Search.asp的處理時間需要0.01S(多線程只是時間分割,對結論沒有影響),也就是說他一秒可以保證100個用戶的Search請求,伺服器允許的最大連接時間為60s,那麼我們使用CC模擬120個用戶並發連接,那麼經過1分鍾,伺服器的被請求了7200次,處理了6000次,於是剩下了1200個並發連接沒有被處理。有的朋友會說:丟連接!丟連接!問題是伺服器是按先來後到的順序丟的,這1200個是在最後10秒的時候發起的,想丟?!還早,經過計算,伺服器滿負開始丟連接的時候,應該是有7200個並發連接存在隊列,然後伺服器開始120個/秒的丟連接,我們發動的連接也是120個/秒,伺服器永遠有處理不完的連接,伺服器的CPU 100%並長時間保持,然後丟連接的60秒伺服器也判斷處理不過來了,新的連接也處理不了,這樣伺服器達到了超級繁忙狀態。
蝴蝶:我們假設伺服器處理Search只用了0.01S,也就是10毫秒(這個速度你可以去各個有開放時間顯示的論壇看看),我們使用的線程也只有120,很多伺服器的丟連接時間遠比60S長,我們的使用線程遠比120多,可以想像可怕了吧,而且客戶機只要發送了斷開,連接的保持是代理做的,而且當伺服器收到SQL請求,肯定會進入隊列,不論連接是否已經斷開,而且伺服器是並發的,不是順序執行,這樣使得更多的請求進入內存請求,對伺服器負擔更大。
當然,CC也可以利用這里方法對FTP進行攻擊,也可以實現TCP-FLOOD,這些都是經過測試有效的。
防範方法
說了攻擊原理,大家肯定會問,那麼怎麼防禦?使用硬體防火牆我不知道如何防範,除非你完全屏蔽頁面訪問,我的方法是通過頁面的編寫實現防禦。
1. 使用Cookie認證。這時候朋友說CC裡面也允許Cookie,但是這里的Cookie是所有連接都使用的,所以啟用IP+Cookie認證就可以了。
2. 利用Session。這個判斷比Cookie更加方便,不光可以IP認證,還可以防刷新模式,在頁面里判斷刷新,是刷新就不讓它訪問,沒有刷新符號給它刷新符號。給些示範代碼吧,Session:
<%if session(「refresh」)<> 1 then
Session(「refresh」)=session(「refresh」)+1
Response.redirect 「index.asp」
End if
%>
這樣用戶第一次訪問會使得Refresh=1,第二次訪問,正常,第三次,不讓他訪問了,認為是刷新,可以加上一個時間參數,讓多少時間允許訪問,這樣就限制了耗時間的頁面的訪問,對正常客戶幾乎沒有什麼影響。
3. 通過代理發送的HTTP_X_FORWARDED_FOR變數來判斷使用代理攻擊機器的真實IP,這招完全可以找到發動攻擊的人,當然,不是所有的代理伺服器都發送,但是有很多代理都發送這個參數。詳細代碼:
<%
Dim fsoObject
Dim tsObject
dim file
if Request.ServerVariables("HTTP_X_FORWARDED_FOR")="" then
response.write "無代理訪問"
response.end
end if
Set fsoObject = Server.CreateObject("Scripting.FileSystemObject")
file = server.mappath("CCLog.txt")
if not fsoObject.fileexists(file) then
fsoObject.createtextfile file,true,false
end if
set tsObject = fsoObject.OpenTextFile(file,8)
tsObject.Writeline Request.ServerVariables("HTTP_X_FORWARDED_FOR")&"["&Request.ServerVariables("REMOTE_ADDR")&"]"&now()
Set fsoObject = Nothing
Set tsObject = Nothing
response.write "有代理訪問"
%>
這樣會生成CCLog.txt,它的記錄格式是:真實IP [代理的IP] 時間,看看哪個真實IP出現的次數多,就知道是誰在攻擊了。將這個代碼做成Conn.asp文件,替代那些連接資料庫的文件,這樣所有的資料庫請求就連接到這個文件上,然後馬上就能發現攻擊的人。
4. 還有一個方法就是把需要對數據查詢的語句做在Redirect後面,讓對方必須先訪問一個判斷頁面,然後Redirect過去。
5. 在存在多站的伺服器上,嚴格限制每一個站允許的IP連接數和CPU使用時間,這是一個很有效的方法。
CC的防禦要從代碼做起,其實一個好的頁面代碼都應該注意這些東西,還有SQL注入,不光是一個入侵工具,更是一個DDOS缺口,大家都應該在代碼中注意。舉個例子吧,某伺服器,開動了5000線的CC攻擊,沒有一點反應,因為它所有的訪問資料庫請求都必須一個隨機參數在Session裡面,全是靜態頁面,沒有效果。突然發現它有一個請求會和外面的伺服器聯系獲得,需要較長的時間,而且沒有什麼認證,開800線攻擊,伺服器馬上滿負荷了。
代碼層的防禦需要從點點滴滴做起,一個腳本代碼的錯誤,可能帶來的是整個站的影響,甚至是整個伺服器的影響,慎之!
Ⅵ 伺服器崩潰了進不去了怎麼辦
伺服器數據恢復工程師對客戶的伺服器進行了初步檢查,檢查結果與客戶描述及故障推測一致,伺服器數據丟失的原因確實與異常斷電有關,由於突然斷電導致了啟動信息丟失,另外客戶伺服器上的資料庫也受到了破壞。想要恢復數據除了修復linux操作系統外還需要整理資料庫碎片,修復資料庫。
【伺服器數據恢復過程】
伺服器數據恢復工程師將客戶伺服器內的所有數據都按扇區備份到專用伺服器上,將客戶原始伺服器狀態復原,開始在專用伺服器上進行數據分析和恢復。
linux系統修復後嘗試啟動伺服器,伺服器成功啟動,但資料庫無法啟動,印證了之前工程師推測的資料庫數據遭受破壞的推斷。
數據恢復工程師繼續分析資料庫碎片數據,修改資料庫錯誤數據,嘗試修復並掛起資料庫,最終成功恢復伺服器內的資料庫數據。交由客戶對所有數據進行驗證。
【伺服器數據恢復結論】
經過客戶對恢復數據進行驗證,確認伺服器及伺服器上的資料庫數據恢復完整、准確,本次數據恢復圓滿成功。
【伺服器數據恢復後記】
1、伺服器故障後應避免隨意拔插硬碟,避免硬碟盤序混亂。
2、避免對需要恢復數據的伺服器進行寫入和修改操作。
3、求助專業伺服器數據恢復公司的專業伺服器數據恢復工程師,切忌在未備份的情況對伺服器進行操作。
Ⅶ mysql資料庫崩潰的原因
MySQL 在崩潰恢復時,會遍歷打開所有 ibd 文件的 header page 驗證數據字典的准確性,如果 MySQL 中包含了大量表,這個校驗過程就會比較耗時。 MySQL 下崩潰恢復確實和表數量有關,表總數越大,崩潰恢復時間越長。另外磁碟 IOPS 也會影響崩潰恢復時間,像這里開發庫的 HDD IOPS 較低,因此面對大量的表空間,校驗速度就非常緩慢。另外一個發現,MySQL 8 下正常啟用時居然也會進行表空間校驗,而故障恢復時則會額外再進行一次表空間校驗,等於校驗了 2 遍。不過 MySQL 8.0 里多了一個特性,即表數量超過 5W 時,會啟用多線程掃描,加快表空間校驗過程。
如何跳過校驗MySQL 5.7 下有方法可以跳過崩潰恢復時的表空間校驗過程嘛?查閱了資料,方法主要有兩種:
1. 配置 innodb_force_recovery可以使 srv_force_recovery != 0 ,那麼 validate = false,即可以跳過表空間校驗。實際測試的時候設置 innodb_force_recovery =1,也就是強制恢復跳過壞頁,就可以跳過校驗,然後重啟就是正常啟動了。通過這種臨時方式可以避免崩潰恢復後非常耗時的表空間校驗過程,快速啟動 MySQL,個人目前暫時未發現有什麼隱患。2. 使用共享表空間替代獨立表空間這樣就不需要打開 N 個 ibd 文件了,只需要打開一個 ibdata 文件即可,大大節省了校驗時間。自從聽了姜老師講過使用共享表空間替代獨立表空間解決 drop 大表時性能抖動的原理後,感覺共享表空間在很多業務環境下,反而更有優勢。
臨時冒出另外一種解決想法,即用 GDB 調試崩潰恢復,通過臨時修改 validate 變數值讓 MySQL 跳過表空間驗證過程,然後讓 MySQL 正常關閉,重新啟動就可以正常啟動了。但是實際測試發現,如果以 debug 模式運行,確實可以臨時修改 validate 變數,跳過表空間驗證過程,但是 debug 模式下代碼運行效率大打折扣,反而耗時更長。而以非 debug 模式運行,則無法修改 validate 變數,想法破滅。
Ⅷ 求助伺服器崩潰原因和解決方法
在計算機網路日益普及的今天,計算機安全不但要求防治計算機病毒,而且要提高系統抵抗黑客非法入侵的能力,還要提高對遠程數據傳輸的保密性,避免在傳輸途中遭受非法竊取。下面壹基比小喻來給你們講講伺服器託管站點崩潰的幾大原因。
第一,內存泄漏
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站點無法正常工作,這使得系統地檢查所有問題變得很困難。
Ⅸ 伺服器崩潰10天沒好
系統出問題了,只能重做系統。
伺服器崩潰的集中原因及解決方案:
內存泄漏:C/C++程序還可能產生另一個指針問題:丟失對已分配內存的引用。當內存是在子程序中被分 配時,通常會出現這種問題,其結果是程序從子程序中返回時不會釋放內存。如此一來,對已分配的內存的引用就會丟失,只要操作系統還在運行中,則進程就會一 直使用該內存。這樣的結果是,曾佔用更多的內存的程序會降低系統性能,直到機器完全停止工作,才會完全清空內存。
C指針錯誤:用C或C++編寫的程序,如Web伺服器API模塊,有可能導致系統的崩潰,因為只要間接引 用指針(即,訪問指向的內存)中出現一個錯誤,就會導致操作系統終止所有程序。另外,使用了糟糕的C指針的Java模擬量(analog)將訪問一個空的 對象引用。Java中的空引用通常不會導致立刻退出JVM,但是前提是程序員能夠使用異常處理方法恰當地處理錯誤。在這方面,Java無需過多的關注,但 使用Java對可靠性進行額外的度量則會對性能產生一些負面影響。
資料庫中的臨時表不夠用:許多資料庫的臨時表(cursor)數目都是固定的,臨時表即保留查詢結果的內存區域。在臨時表中的數據都被讀取後,臨時表便會被釋放,但大量同時進行的查詢可能耗盡數目固定的所有臨時表。這時,其他的查詢就需要列隊等候,直到有臨時表被釋放時才能再繼續運行。