《WEB安全性测试测试用例(基础)5276.docx》由会员分享,可在线阅读,更多相关《WEB安全性测试测试用例(基础)5276.docx(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、建立整体体的威胁胁模型,测测试溢出出漏洞、信信息泄漏漏、错误误处理、SQL 注入、身份验证和授权错误.1. 输入验证证客户端验验证服务务器端验验证(禁禁用脚本本调试,禁禁用Coookiies)1.输入入很大的的数(如如4,2294,9677,2669),输输入很小小的数(负数)2.输入入超长字字符,如对输输入文字字长度有有限制,则尝试试超过限限制,刚好到到达限制制字数时时有何反反应3.输入入特殊字字符,如:!#$%&*()_+:”|4.输入入中英文文空格,输输入字符符串中间间含空格格,输入入首尾空空格5.输入入特殊字字符串NNULLL,nuull,0x00d 00x0aa6.输入入正常字字符串
2、7.输入入与要求求不同类类型的字字符,如如: 要求求输入数数字则检检查正值值,负值,零值(正正零,负负零),小数,字母,空值; 要求输输入字母母则检查查输入数数字8.输入入htmml和javvasccrippt代码码9.对于于像回答答数这样样需检验验数字正正确性的的测试点点,不仅仅对比其其与问题题最终页页的回答答数,还还要对回回答进行行添加删删除等操操作后查查看变化化例如:1.输入入”gfhhd,看是否否出错;2.输入入,看是否否出现文文本框;3.输入入allertt(“提示”)看是是否出现现提示。关于上传传:1.上传传文件是是否有格格式限制制,是否可可以上传传exee文件;2.上传传文件是是
3、否有大大小限制制,上传太太大的文文件是否否导致异异常错误误,上传传0K的的文件是是否会导导致异常常错误,上传并并不存在在的文件件是否会会导致异异常错误误;3.通过过修改扩扩展名的的方式是是否可以以绕过格格式限制制,是否否可以通通过压包包方式绕绕过格式式限制;4.是否否有上传传空间的的限制,是否可可以超过过空间所所限制的的大小,如将超超过空间间的大文文件拆分分上传是是否会出出现异常常错误。5.上传传文件大大小大于于本地剩剩余空间间大小,是是否会出出现异常常错误。6.关于于上传是是否成功功的判断断。上传传过程中中,中断断。程序序是否判判断上传传是否成成功。7.对于于文件名名中带有有中文字字符,特特
4、殊字符符等的文文件上传传。下载:1. 避免输入入:.wweb.2. 修改命名名后缀。关于URRL:1.某些些需登录录后或特特殊用户户才能进进入的页页面,是否可可以通过过直接输输入网址址的方式式进入;2.对于于带参数数的网址址,恶意修修改其参参数,(若为数数字,则输入入字母,或很大大的数字字,或输入入特殊字字符等)后打开开网址是是否出错错,是否可可以非法法进入某某些页面面;3.搜索索页面等等urll中含有有关键字字的,输入httml代代码或JJavaaScrriptt看是否否在页面面中显示示或执行行。4.输入入善意字字符。UBB:urll=htttp:/wwww.*.ccom 你的的网站/urr
5、l1.试着着用各种种方式输输入UBBB代码码,比如代代码不完完整,代码嵌嵌套等等等.2.在UUBB代代码中加加入属性性,如样式式,事件等等属性,看是否否起作用用3.输入入编辑器器中不存存在的UUBB代代码,看是否否起作用用urll=jaavasscriipt:aleert(heelloo)链接/urllemaail=javvasccrippt:aalerrt(helllo)EEMaiil/emaailemaail=yanngtaaon STTYLEE=bbackkgrooundd-immagee: uurl(javvasccrippt:aalerrt(XSSS)yyanggtaoo/emmai
6、llimgghtttp:/ styyle=baackggrouund-imaage:urll(jaavasscriipt:aleert(allertt(xsss)/iimgimgghtttp:/ oonmoouseeoveer=aalerrt(helllo);/iimgb SSTYLLE=bacckgrrounnd-iimagge: urll(jaavasscriipt:aleert(XSSS)一首诗诗酸涩涩涩服务网网/bbi SSTYLLE=bacckgrrounnd-iimagge: urll(jaavasscriipt:aleert(XSSS)一二三三四五六六七北京京市/iu一一二三四四
7、五六七七北京市市/uufonnt=微微软雅黑黑 SSTYLLE=bacckgrrounnd-iimagge: urll(jaavasscriipt:aleert(XSSS)一二三三四五六六七北京京市/fonntsizze=44 SSTYLLE=bacckgrrounnd-iimagge: urll(jaavasscriipt:aleert(XSSS)一二三三四五六六七北京京市/sizzecollor=Redd SSTYLLE=bacckgrrounnd-iimagge: urll(jaavasscriipt:aleert(XSSS)一二三三四五六六七北京京市/colloraliign=cenn
8、terr SSTYLLE=bacckgrrounnd-iimagge: urll(jaavasscriipt:aleert(XSSS)一二三三四五六六七北京京市/aliignflooat=lefft STYYLE=baackggrouund-imaage: urrl(jjavaascrriptt:allertt(XXSS)一二二三四五五六七北北京市/flloattfonnt=微微软雅黑黑 STTYLEE=bbackkgrooundd-immagee: uurl(javvasccrippt:aalerrt(XSSS)一一二三四四五六七七北京市市/ffonttsizze=44 STTYLEE=bb
9、ackkgrooundd-immagee: uurl(javvasccrippt:aalerrt(XSSS)一一二三四四五六七七北京市市/ssizeecollor=Redd STTYLEE=bbackkgrooundd-immagee: uurl(javvasccrippt:aalerrt(XSSS)一一二三四四五六七七北京市市/ccolooraliign=cennterr STTYLEE=bbackkgrooundd-immagee: uurl(javvasccrippt:aalerrt(XSSS)一一二三四四五六七七北京市市/aaliggnlisst=11*一一二三四四五六七七北京市市/l
10、listtinddentt一二二三四五五六七北北京市/inndenntflooat=lefft SSTYLLE=bacckgrrounnd-iimagge: urll(jaavasscriipt:aleert(XSSS)一二三三四五六六七北京京市/flooatmeddia=ra,4000,3000,00htttp:/bbbsfforbblogg.ikkakaa.coom/ppostttoppic.asppx?fforuumidd=1009/meddia2. 输出编码码常用的测测试输入入语句有有:inpput/ allertt(hhelllo);1.jppg onmmousseovver=all
11、ertt(xxss)allertt(xsss);httpp:/xxxx;aalerrt(xsss);varr/ aa=aa”xxss&a=” ; b=”;allertt(/xxss/);/”“”“”“”“”titlle=”对输出数数据到输输出数据据的对比比,看是是否出现现问题。3. 防止SQQL注入入Admiin-or -andd ( ) exxec iinseert * % chhr miid and11=1;And 11=1; aNNd 11=1 ; chhar(97)chaar(1110)chaar(1100) chhar(49)chaar(661)ccharr(499) ; %20AA
12、ND%2011=2andd 1=1 ; Andd 11=1 ; aNdd 1=11 ;and 1=22 ; andd 1=2and 2=22and useer00and (seelecct ccounnt(*) ffromm syysobbjeccts)0and (seelecct ccounnt(*) ffromm mssysoobjeectss)00and (Seelecct CCounnt(*) ffromm Addminn)=0and (seelecct ttop 1 llen(useernaame) frrom Admmin)0(useernaame 已知字字段);exeec mma
13、stter.xpp_cmmdshhelll “nnet useer nnamee paasswwordd /aadd”;exeec mmastter.xpp_cmmdshhelll “nnet loccalggrouup nnamee addminnisttrattorss /aadd”and 0(seelecct ccounnt(*) ffromm addminn)简单的如如wheere xtyype=U,字符符U对应应的ASSCIII码是885,所所以可以以用whheree xttypee=chhar(85)代替;如果字字符是中中文的,比比如whheree naame=用户户,可可以用ww
14、herre nnamee=nccharr(2999922)+nnchaar(2251443)代代替。4. 跨站脚本本攻击(XXSS)对于 XXSS,只只需检查查 HTTML 输出并并看看您您输入的的内容在在什么地地方。它它在一个个 HRREF 标记中中吗?是是否在 IFRRAMEE 标记记中?它它在 CCLSIID 标标记中吗吗?在 IMGG SRRC 中中吗?某某些 FFlassh 内内容的 PARRAM NAMME 是是怎样的的?!#$%&*()_+,./?;-%3CCinpput /%33E%3CCscrriptt%3EEaleert(XSSS)%3CC/sccrippt%33Einnp
15、utt/ aalerrt(xsss)aalerrt(xsss);aalerrt(xsss)javvasccrippt:aalerrt(/xsss/)javvasccrippќɌaleert(/xsss/) =aalerrt(ddocuumennt.ccookkie) 1.jjpg onnmouuseooverr=aalerrt(xsss)aalerrt(xsss);htttp:/xxxx;aleert(xsss);vaar/ a=a”xsss&aleert(XSSS)%222%227AK%22%20sstylle%33D%222baackggrouund:urll(jaava
16、sscriipt:aleert(%277XSSS%277)%22%20OOS%222%222%2BBaleert(%277XSSS%277)%22B%222a?allertt(VVulnneraablee)&:var froom = $!ruundaata.Parrameeterrs.ggetSStriing(frrom);vaar ffromm = ”;hhackkerFFuncctioon(ddocuumennt.ccookkie);”;httpp:/seaarchhboxx.maapbaar.ccom/pubblissh/ttempplatte/ttempplatte10010/?CII
17、D=qqinggke&tidd=tiid10010&cittyNaame=天津allertt(hhelllo)&niid=MMAPBBXITTBJRRQMYYWJRRXPCCBX5. 跨站请求求伪造(CCSRFF)同个浏览览器打开开两个页页面,一一个页面面权限失失效后,另另一个页页面是否否可操作作成功。当页面没没有CHHECKKCODDE时,查查看页面面源代码码,查是是是否有有tokken。如如果页面面完全是是展示页页面,是是不会有有tokken的的。一、 用户注册册只从用户户名和密密码角度度写了几几个要考考虑的测测试点,如如果需求求中明确确规定了了安全问问题,EEmaiil,出出生日期期,地
18、址址,性别别等等一一系列的的格式和和字符要要求,那那就都要要写用例例测了以等价类类划分和和边界值值法来分分析1.填写写符合要要求的数数据注册册: 用用户名字字和密码码都为最最大长度度(边界界值分析析,取上上点)2.填写写符合要要求的数数据注册册 :用用户名字字和密码码都为最最小长度度(边界界值分析析,取上上点)3.填写写符合要要求的数数据注册册:用户户名字和和密码都都是非最最大和最最小长度度的数据据(边界界值分析析,取内内点)4.必填填项分别别为空注注册5.用户户名长度度大于要要求注册册1位(边边界值分分析,取取离点)6.用户户名长度度小于要要求注册册1位(边边界值分分析,取取离点)7.密码码
19、长度大大于要求求注册11位(边边界值分分析,取取离点)8.密码码长度小小于要求求注册11位(边边界值分分析,取取离点)9.用户户名是不不符合要要求的字字符注册册(这个个可以划划分几个个无效的的等价类类,一般般写一两两个就行行了,如如含有空空格,#等,看看需求是是否允许许吧)10.密密码是不不符合要要求的字字符注册册(这个个可以划划分几个个无效的的等价类类,一般般写一两两个就行行了)11.两两次输入入密码不不一致(如如果注册册时候要要输入两两次密码码,那么么这个是是必须的的)12.重重新注册册存在的的用户13.改改变存在在的用户户的用户户名和密密码的大大小写,来来注册。(有有的需求求是区分分大小
20、写写,有的的不区分分)14.看看是否支支持taap和eenteer键等等;密码码是否可可以复制制粘贴;密码是是否以* 之类类的加秘秘符号显显示备注:边边界值的的上点、内内点和离离点大家家应该都都知道吧吧,呵呵呵,这里里我就不不细说了了二、 修改密码码当然具体体情况具具体分析析哈不不能一概概而论实际测试试中可能能只用到到其中几几条而已已,比如如银行卡卡密码的的修改,就就不用考考虑英文文和非法法字符,更更不用考考虑那些些之类的的快捷键键。而有有的需要要根据需需求具体体分析了了,比如如连续出出错多少少次出现现的提示示,和一一些软件件修改密密码要求求一定时时间内有有一定的的修改次次数限制制等等。1.不
21、输输入旧密密码,直直接改密密码2.输入入错误旧旧密码3.不输输入确认认新密码码4.不输输入新密密码5.新密密码和确确认新密密码不一一致6.新密密码中有有空格7.新密密码为空空8.新密密码为符符合要求求的最多多字符9.新密密码为符符合要求求的最少少字符10.新新密码为为符合要要求的非非最多和和最少字字符11.新新密码为为最多字字符-1112.新新密码为为最少字字符+1113.新新密码为为最多字字符+1114.新新密码为为最少字字符-1115.新新密码为为非允许许字符(如如有的密密码要求求必须是是英文和和数字组组成,那那么要试试汉字和和符号等等)16.看看是否支支持taap和eenteer键等等;
22、密码码是否可可以复制制粘贴;密码是是否以* 之类类的加秘秘符号17.看看密码是是否区分分大小写写,新密密码中英英文小写写,确认认密码中中英文大大写18.新新密码与与旧密码码一样能能否修改改成功另外一些些其他的的想法如如下:1 要测测试所有有规约中中约定可可以输入入的特殊殊字符,字字母,和和数字,要要求都可可以正常常输入、显显示正常常和添加加成功2 关注注规约中中的各种种限制,比比如长度度,大否否支持大大小写。3 考虑虑各种特特殊情况况,比如如添加同同名用户户,系统统是否正正确校验验给出提提示信息息,管理理员帐户户是否可可以删除除,因为为有些系系统管理理员拥有有最大权权限,一一旦删除除管理员员帐
23、户,就就不能在在前台添添加,这这给最终终用户会会带来很很多麻烦烦。比较较特殊的的是,当当用户名名中包括括了特殊殊字符,那那么对这这类用户户名的添添加同名名,修改改,删除除,系统统是否能能够正确确实现,我我就遇到到了一个个系统,添添加同名名用户时时,如果果以前的的用户名名没有特特殊字符符,系统统可以给给出提示示信息,如如果以前前的用户户名包含含特殊字字符,就就不校验验在插入入数据库库的时候候报错。后后来查到到原因了了,原来来是在jjavaa中拼SSQL语语句的时时候,因因为有_,所所以就调调用了一一个方法法在“_”,前前面加了了一个转转义字符符,后来来发现不不该调用用这个方方法。所所以去掉掉就好
24、了了。所以以对待输输入框中中的特殊殊字符要要多关注注。4 数值值上的长长度 之之类的,包包括出错错信息是是否合理理 5 特殊殊字符:比如。 / 这些些是否会会造成系系统崩溃溃6 注入入式buug:比比如密码码输入个个or 1=117 登录录后是否否会用明明文传递递参数8 访问问控制(不不知道这这个算不不算):登录后后保存里里面的链链接,关关了浏览览器直接接复制链链接看能能不能访访问。输入框测测试1验证输输入与输输出的是是否信息息一致;2输入框框之前的的标题是是否正确确;3对特殊殊字符的的处理,尤尤其是输输入信息息徐需要要发送到到数据库库的。特特殊字符符包括:(单单引号)、(双引引号)、(中中括
25、号)、()(小小括号)、(大大括号)、;(分号号)、(大大于小于于号)4对输入入框输入入超过限限制的字字符的处处理,一一般非特特殊的没没有作出出限制的的在2555byyte左左右;5输入框框本身的的大小、长长度;6不不同内码码的字符符的输入入;7对空格格、TAAB字符符的处理理机制;8字符本本身显示示的颜色色;9密码输输入窗口口转换成成星号或或其它符符号;100密码码输入框框对其中中的信息息进行加加密,防防止采用用破解星星号的方方法破解解;11按下cctrll和allt键对对输入框框的影响响;122对于于新增、修修改、注注册时用用的输入入框,有有限制的的,应该该输入时时作出提提示,指指出不允允
26、许的或或者标出出允许的的;133对于于有约束束条件要要求的输输入框应应当在条条件满足足时输入入框的状状态发生生相应的的改变,比比如选了了湖南就就应该列列出湖南南下面的的市,或或者选了了某些条条件之后后,一些些输入框框会关闭闭或转为为只读状状态;144输入入类型;根据前前面的栏栏位标题题判断该该输入框框应该输输入哪些些内容算算是合理理的。例例如,是是否允许许输入数数字或字字母,不不允许输输入其他他字符等等。155.输入入长度;数据库库字段有有长度定定义,当当输入过过长时,提提交数据据是否会会出错。166.输入入状态;当处于于某种状状态下,输输入框是是否处于于可写或或非可写写状态。例例如,系系统自
27、动动给予的的编号等等栏位作作为唯一一标识,当当再次处处于编辑辑状态下下,输入入框栏位位应处于于不可写写状态,如如果可写写对其编编辑的话话,可能能会造成成数据重重复引起起冲突等等。177如果果是会进进行数据据库操作作的输入入框,还还可以考考虑输入入SQLL中的一一些特殊殊符号如如单引号号等,有有时会有有意想不不到的错错误出现现188输入入类型输输入长度度是否允允许复制制粘贴为为空的情情况空格格的考虑虑半角全全角测试试对于密密码输入入框要考考虑显示示的内容容是*输入入错误时时的提示示信息及及提示信信息是否否准确199可以以先了解解你要测测试的输输入框在在软件系系统的某某个功能能中所扮扮演的角角色,
28、然然后了解解其具体体的输入入条件,在在将输入入条件按按照有效效等价类类,无效效等价类类,边界界值等方方法进行行测试用用例的设设计。200关键键字有大大小写混混合的情情况;211关键键字中含含有一个个或多个个空格的的情况,包包括前空空格,中中间空格格(多个个关键字字),和和后空格格;222关键键字中是是否支持持通配符符的情况况(视功功能而定定);233关键键字的长长度分别别为9、110、111个字字符时的的情况;244关键键字是vvaliid,但但是没有有匹配搜搜索结果果的情况况;255输入入htmml的标标签会出出现哪些些问题?输入 会出现现什么问问题呢?(这条条是我自自己发现现的,在在网上也
29、也没找到到类似的的东东,呵呵呵,大大家凑合合着看吧吧)安全全测试方方面:给出出一些特特别的关关键字,比比如 oor 11=1, 这样样的关键键字如果果不被处处理就直直接用到到数据库库查询中中去,后后果可想想而知。用户体验验相关我登录失失败的时时候没有有任何提提示,这这没什么么,反正正提示也也只是说说失败进去后发发现颜色色变更很很强烈刺刺得我一一眨眼,不不过多看看几次就就习惯了了。点击某个个链接的的时候出出现错误误页面,刷刷新后就就好了,难难道是随随机错误误?保存文字字的时候候没有成成功提示示,不过过能成功功保存就就算了。浏览记录录的时候候竟然出出现错误误页面,原原来我没没有选记记录就浏浏览了,
30、我我自己操操作不规规范嘛。删除记录录的时候候发现选选错了,想想取消的的时候却却提示删删除成功功,都没没有确认认提示,只只能下次次看仔细细点了。查询时字字母键被被茶杯压压住了多多输了点点字符,竟竟然出现现错误页页面,下下次把东东西整理理好。无聊随便便点点几几个链接接,竟然然没有反反应,既既然不用用,那就就不要做做出来嘛嘛。看看自己己上传的的图片效效果如何何,这个个怎么不不显示?多试几几次发现现名字不不包含中中文就好好了,下下次注意意下。改改字体体字号颜颜色美化化环境嘛嘛,怎么么格式那那里不显显示正确确的字体体字号呢呢,将就就用吧。这里的记记录条数数怎么这这么多啊啊?原来来是没有有删除按按钮,看看
31、来下次次不能随随便加了了。这个结束束时间怎怎么在开开始时间间前啊?原来没没有进行行控制,下下面的人人执行时时还还是自己己改过来来吧。上次我在在这里看看见的图图片呢?刷新后后就出来来了,怎怎么和我我玩捉迷迷藏呢?多输了点点内容,保保存时候候提示太太多了,点点确定后后发现被被清空了了,我一一个小时时的工作作啊!这张图片片真不错错,但是是按钮呢呢,按钮钮呢?按按钮被挤挤掉了我我怎么编编辑啊。听说F55是刷新新点一下下看看。怎怎么好像像变成了了登录界界面?刚学了怎怎么用TTAB键键,确实实很方便便。TAAB一下下。跑哪哪去了,怎怎么一片片空白啊啊?玩游戏的的人点击击速度那那么快,我我也来试试试。怎怎么
32、一双双击就出出错了?我找错别别字是很很厉害的的,这不不就发现现“同意意”写成成了“统统一”。这里提示示只能输输入11000,我偏偏要输入入99999保存看看看,怎怎么系统统不能用用了?这里一点点击就出出现IEE错误,硬硬是不弹弹出我需需要的窗窗口。这个查询询按钮怎怎么灰掉掉了?这这么多记记录让我我一页一一页翻过过去找啊啊。上传第二二个附件件的时候候怎么把把第一个个挤掉了了啊,会会挤掉也也要提示示一下嘛嘛。一个页面面上打开开的记录录太多了了,变体体都用省略了了,要是是鼠标放放上去浮浮动显示示完整标标题就方方便多了了。这几条记记录有依依存关系系,删了了一条其其他就没没了,提提示都没没有,早早知道我
33、我就用编编辑了这条记录录怎么好好像是昨昨天的,我我记得今今天更新新了啊?原来编编辑后的的记录没没有传到到引用的的地方。最最奇怪怪的是昨昨天上传传时候正正常的图图片今天天就不能能显示了了。我记记得没有有只能显显示一天天的功能能啊?这里怎么么没有任任何按钮钮呢,看看手册才才知道竟竟然要用用右键进进行操作作,怎么么突然冒冒出个异异类啊?这里怎么么能增加加两条相相同的记记录呢?不控制制一下天天知道手手下那些些愣头青青会做出出什么来来。这里的菜菜单一层层一层又又一层,足足足有五五层,把把我头都都绕晕了了我我记得哪哪里说过过最好不不要超过过三层的的。这个界面面看起来来怎么这这么别扭扭啊,是是字体太太大了,
34、是是按钮太太小了,还还是功能能太多了了,怎么不是是管理员员登录进进来也能能管理啊啊,那我我这个管管理员的的身份不不是多此此一举吗吗?删除的时时候提示示Errror,幸幸亏我英英语水平平好,可可是你换换成中文文不行吗吗?这条记录录不是删删除了吗吗,怎么么还能引引用啊,到到时候出出错了怎怎么办,难难道还要要我记住住删了那那些记录录?经过精心心编辑,我我发了一一条通知知,怎么么用普通通用户查查看的时时候是默默认的字字体字号号啊?这几个页页面上的的当前日日期怎么么是固定定不变的的啊,这这都是去去年的日日期了,不不会是开开发时候候的吧。让Webb站点崩崩溃最常常见的七七大原因因磁盘已满满导导致系统统无法
35、正正常运行行的最可可能的原原因是磁磁盘已满满。一个个好的网网络管理理员会密密切关注注磁盘的的使用情情况,隔隔一定的的时间,就就需要将将磁盘上上的一些些负载转转存到备备份存储储介质中中(例如如磁带)。日志文件会很快用光所有的磁盘空间。Web服务器的日志文件、SQL*Net的日志文件、JDBC日志文件,以及应用程序服务器日志文件均与内存泄漏有同等的危害。可以采取措施将日志文件保存在与操作系统不同的文件系统中。日志文件系统空间已满时Web服务器也会被挂起,但机器自身被挂起的几率已大大减低。C指针错误用C或C+编写的程序,如Web服务器API模块,有可能导致系统的崩溃,因为只要间接引用指针(即,访问指
36、向的内存)中出现一个错误,就会导致操作系统终止所有程序。另外,使用了糟糕的C指针的Java模拟量(analog)将访问一个空的对象引用。Java中的空引用通常不会导致立刻退出JVM,但是前提是程序员能够使用异常处理方法恰当地处理错误。在这方面,Java无需过多的关注,但使用 Java对可靠性进行额外的度量则会对性能产生一些负面影响。内存泄漏C/C+程序还可能产生另一个指针问题:丢失对已分配内存的引用。当内存是在子程序中被分配时,通常会出现这种问题,其结果是程序从子程序中返回时不会释放内存。如此一来,对已分配的内存的引用就会丢失,只要操作系统还在运行中,则进程就会一直使用该内存。这样的结果是,曾
37、占用更多的内存的程序会降低系统性能,直到机器完全停止工作,才会完全清空内存。解决方案之一是使用代码分析工具(如Purify)对代码进行仔细分析,以找出可能出现的泄漏问题。但这种方法无法找到由其他原因引起的库中的泄漏,因为库的源代码是不可用的。另一种方法是每隔一段时间,就清除并重启进程。Apache的Web服务器就会因这个原因创建和清除子进程。虽然Java本身并无指针,但总的说来,与C程序相比, Java程序使用内存的情况更加糟糕。在Java中,对象被频繁创建,而直到所有到对象的引用都消失时,垃圾回收程序才会释放内存。即使运行了垃圾回收程序,也只会将内存还给虚拟机VM,而不是还给操作系统。结果是
38、:Java程序会用光给它们的所有堆,从不释放。由于要保存实时(Just In Time,JIT)编译器产生的代码,Java程序的大小有时可能会膨胀为最大堆的数倍之巨。还有一个问题,情况与此类似。从连接池分配一个数据库连接,而无法将已分配的连接还回给连接池。一些连接池有活动计时器,在维持一段时间的静止状态之后,计时器会释放掉数据库连接,但这不足以缓解糟糕的代码快速泄漏数据库连接所造成的资源浪费。进程缺乏文件描述符如果已为一台Web服务器或其他关键进程分配了文件描述符,但它却需要更多的文件描述符,则服务器或进程会被挂起或报错,直至得到了所需的文件描述符为止。文件描述符用来保持对开放文件和开放套接字
39、的跟踪记录,开放文件和开放套接字是Web服务器很关键的组成部分,其任务是将文件复制到网络连接。默认时,大多数shell有64个文件描述符,这意味着每个从shell启动的进程可以同时打开64个文件和网络连接。大多数shell都有一个内嵌的 ulimit命令可以增加文件描述符的数目。线程死锁由多线程带来的性能改善是以可靠性为代价的,主要是因为这样有可能产生线程死锁。线程死锁时,第一个线程等待第二个线程释放资源,而同时第二个线程又在等待第一个线程释放资源。我们来想像这样一种情形:在人行道上两个人迎面相遇,为了给对方让道,两人同时向一侧迈出一步,双方无法通过,又同时向另一侧迈出一步,这样还是无法通过。
40、双方都以同样的迈步方式堵住了对方的去路。假设这种情况一直持续下去,这样就不难理解为何会发生死锁现象了。解决死锁没有简单的方法,这是因为使线程产生这种问题是很具体的情况,而且往往有很高的负载。大多数软件测试产生不了足够多的负载,所以不可能暴露所有的线程错误。在每一种使用线程的语言中都存在线程死锁问题。由于使用Java进行线程编程比使用C容易,所以 Java程序员中使用线程的人数更多,线程死锁也就越来越普遍了。可以在Java代码中增加同步关键字的使用,这样可以减少死锁,但这样做也会影响性能。如果负载过重,数据库内部也有可能发生死锁。如果程序使用了永久锁,比如锁文件,而且程序结束时没有解除锁状态,则其他进程可能无法使用这种类型的锁,既不能上锁,也不能解除锁。这会进一步导致系统不能正常工作。这时必须手动地解锁。服务器超载Netscape Web服务器的每个连接都使用一个线程。Netscape Enterprise Web服务器会在线程用完后挂起,而不为已存在的连接提供任何服务。如果有一种负载分布机制可以检测到服务器没有响应,则该服务器上的负载就可以分