??xml version="1.0" encoding="utf-8" standalone="yes"?>国产suv精品一区二区四区视频,91在线最新,国产区高清在线http://www.aygfsteel.com/xiaomage234/category/1690.html行到水穷?坐看云vӞ才发玎ͼ其实人生最重要的是扑ֈ一些吃的东西;扑ֈ一些喝的东西;扑ֈ一些可以一hW一h泪的朋友和一个懂你的人!zh-cnFri, 02 Mar 2007 07:36:43 GMTFri, 02 Mar 2007 07:36:43 GMT60weblogic培训W记Q三Qjava虚拟机配|?/title><link>http://www.aygfsteel.com/xiaomage234/articles/6338.html</link><dc:creator>马?/dc:creator><author>马?/author><pubDate>Sat, 18 Jun 2005 07:03:00 GMT</pubDate><guid>http://www.aygfsteel.com/xiaomage234/articles/6338.html</guid><wfw:comment>http://www.aygfsteel.com/xiaomage234/comments/6338.html</wfw:comment><comments>http://www.aygfsteel.com/xiaomage234/articles/6338.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/xiaomage234/comments/commentRss/6338.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/xiaomage234/services/trackbacks/6338.html</trackback:ping><description><![CDATA[     摘要: u       JRockit是BEA公司开发的Intelq_之上的高性能以及高可理性的jvm产品Q在Intelq_上用JRockit无疑会大大的提高效率。用向导徏立server的配|的时候,可以选择JRockit作ؓ该server的虚拟机Q另外,也可以在域的startWebLogic.cmd或者startWebLogic.sh脚本...  <a href='http://www.aygfsteel.com/xiaomage234/articles/6338.html'>阅读全文</a><img src ="http://www.aygfsteel.com/xiaomage234/aggbug/6338.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/xiaomage234/" target="_blank">马?/a> 2005-06-18 15:03 <a href="http://www.aygfsteel.com/xiaomage234/articles/6338.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>weblogic培训W记Q二Qweb应用E序的相关配|?/title><link>http://www.aygfsteel.com/xiaomage234/articles/6337.html</link><dc:creator>马?/dc:creator><author>马?/author><pubDate>Sat, 18 Jun 2005 06:59:00 GMT</pubDate><guid>http://www.aygfsteel.com/xiaomage234/articles/6337.html</guid><wfw:comment>http://www.aygfsteel.com/xiaomage234/comments/6337.html</wfw:comment><comments>http://www.aygfsteel.com/xiaomage234/articles/6337.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/xiaomage234/comments/commentRss/6337.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/xiaomage234/services/trackbacks/6337.html</trackback:ping><description><![CDATA[<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 57.75pt; TEXT-INDENT: -15.75pt; mso-list: l0 level1 lfo1; tab-stops: list 57.75pt"><FONT size=4><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-ansi-language: ZH-CN"><SPAN style="mso-list: Ignore">1?/SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-ansi-language: ZH-CN">单线E模式servlet<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></FONT></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 57.75pt"><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-ansi-language: ZH-CN"><FONT size=4>默认情况下,一个servlet实例会产生多个U程来同时响应多个请求?o:p></o:p></FONT></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 57.75pt"><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-ansi-language: ZH-CN"><FONT size=4>如果某个servlet实现SingleThreadMod旗标接口Q那么这个servlet会自动拒绝多\q行h的模式。在q种情况下,weblogic会生一个servlet实例池来满单线E的要求?o:p></o:p></FONT></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 57.75pt"><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-ansi-language: ZH-CN"><FONT size=4>目前Q应该尽量避免用单U程模式的servletQ如果需要在大容量的pȝ中用单U程模式的servletQ那么应该调整如下的参数Q?o:p></o:p></FONT></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 57.75pt"><FONT size=4><span id="wmqeeuq" class=dialog-label><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US>Single Threaded Servlet Pool Size</SPAN></B><SPAN lang=EN-US> </SPAN></SPAN><span id="wmqeeuq" class=dialog-label><SPAN style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">q个参数可在</SPAN><SPAN lang=EN-US>weblogic.xml</SPAN></SPAN><span id="wmqeeuq" class=dialog-label><SPAN style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">或者在</SPAN><SPAN lang=EN-US>weblogic</SPAN></SPAN><span id="wmqeeuq" class=dialog-label><SPAN style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">控制C</SPAN><SPAN lang=EN-US>webapplication</SPAN></SPAN><span id="wmqeeuq" class=dialog-label><SPAN style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">菜单</SPAN><SPAN lang=EN-US>---</SPAN></SPAN><span id="wmqeeuq" class=dialog-label><SPAN style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">?/SPAN></SPAN><SPAN style="mso-ansi-language: ZH-CN">configuration</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-ansi-language: ZH-CN">?/SPAN><SPAN style="mso-ansi-language: ZH-CN">---</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-ansi-language: ZH-CN">?/SPAN><span id="wmqeeuq" class=subtab-selected><SPAN lang=EN-US>Descriptor</SPAN></SPAN><SPAN lang=EN-US>  </SPAN><SPAN style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">子页中进行设|?/SPAN></FONT></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 57.75pt"><FONT size=4><SPAN style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">默认?/SPAN><SPAN lang=EN-US>5</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">?/SPAN><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><o:p></o:p></SPAN></FONT></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 57.75pt; TEXT-INDENT: -15.75pt; mso-list: l0 level1 lfo1; tab-stops: list 57.75pt"><FONT size=4><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><SPAN style="mso-list: Ignore">2?/SPAN></SPAN><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">Weblogic</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">生模式下会自动监测<SPAN lang=EN-US>servlet</SPAN>?SPAN lang=EN-US>jsp</SPAN>的更Ҏ况,在品模式下Q不需要这些检查,可以通过下面的参数更改:<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></FONT></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: 15.75pt"><FONT size=4><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">JSPPage Check Secs</SPAN></B><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">?B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US>Servlet Reload Check Secs</SPAN></B>均设?SPAN lang=EN-US>-1</SPAN>q两Ҏ<SPAN lang=EN-US>weblogic</SPAN>?SPAN lang=EN-US>jsp</SPAN>?SPAN lang=EN-US>servlet</SPAN>的时间间隔。设|ؓ<SPAN lang=EN-US>-1</SPAN>Q?SPAN lang=EN-US>weblogic</SPAN>不再检查?SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></FONT></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: 15.75pt"><FONT size=4><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">关闭</SPAN><span id="wmqeeuq" class=dialog-label><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US>JSPKeep Generated</SPAN></SPAN></FONT></B></SPAN><span id="wmqeeuq" class=dialog-label><FONT size=4><SPAN style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">?/SPAN><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US>JSPVerbose</SPAN></SPAN></B></SPAN><span id="wmqeeuq" class=dialog-label><SPAN style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">Q品模式下也不需要这两个选项?/SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></FONT></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: 15.75pt"><span id="wmqeeuq" class=dialog-label><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US><FONT size=4>Enable JSP Line Numbers</FONT></SPAN></SPAN></B><FONT size=4><SPAN lang=EN-US> </SPAN></SPAN><span id="wmqeeuq" class=dialog-label><SPAN style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">q个选项是启?/SPAN><SPAN lang=EN-US>jsp</SPAN></SPAN><span id="wmqeeuq" class=dialog-label><SPAN style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">行号的选项Q启用行L目的是用来支持调试,有些</SPAN><SPAN lang=EN-US>IDE</SPAN></SPAN><span id="wmqeeuq" class=dialog-label><SPAN style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">可以?/SPAN><SPAN lang=EN-US>jsp</SPAN></SPAN><span id="wmqeeuq" class=dialog-label><SPAN style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">生成?/SPAN><SPAN lang=EN-US>java</SPAN></SPAN><span id="wmqeeuq" class=dialog-label><SPAN style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">源代码中讄断点用于调试。生产模式中也不需要?/SPAN></SPAN><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><o:p></o:p></SPAN></FONT></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><SPAN style="COLOR: red; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-ansi-language: ZH-CN"><FONT size=4>注意Q在产品发布模式下,L止对servlet和jsp的变更检查,q样除了能提高效率以外,q可以防止用上传文g的方式对服务器的d。如果需要更改servlet和jspQ可以重新部|应用?o:p></o:p></FONT></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 57.75pt; TEXT-INDENT: -15.75pt; mso-list: l0 level1 lfo1; tab-stops: list 57.75pt"><FONT size=4><SPAN style="mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: ZH-CN"><SPAN style="mso-list: Ignore">3?/SPAN></SPAN><SPAN style="mso-ansi-language: ZH-CN">Session</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-ansi-language: ZH-CN">?/SPAN><SPAN style="mso-ansi-language: ZH-CN">cookie</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-ansi-language: ZH-CN">的相关配|?/SPAN><SPAN style="mso-ansi-language: ZH-CN"><o:p></o:p></SPAN></FONT></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 57.75pt"><FONT size=4><SPAN style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-ansi-language: ZH-CN">概念<B style="mso-bidi-font-weight: normal">会话</B></SPAN><B style="mso-bidi-font-weight: normal"><SPAN style="mso-ansi-language: ZH-CN">cookie</SPAN></B><SPAN style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-ansi-language: ZH-CN">Q如果不讄q期旉Q则表示q个</SPAN><SPAN style="mso-ansi-language: ZH-CN">cookie</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-ansi-language: ZH-CN">的生命期为浏览器会话期间Q只要关闭浏览器H口Q?/SPAN><SPAN style="mso-ansi-language: ZH-CN">cookie</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-ansi-language: ZH-CN">消׃。这U生命期为浏览器会话期的</SPAN><SPAN style="mso-ansi-language: ZH-CN"> cookie</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-ansi-language: ZH-CN">被称Z?/SPAN><SPAN style="mso-ansi-language: ZH-CN">cookie</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-ansi-language: ZH-CN">?/SPAN><SPAN style="mso-ansi-language: ZH-CN"><o:p></o:p></SPAN></FONT></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 57.75pt"><span id="wmqeeuq" class=dialog-label><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US><FONT size=4>Session Cookie Max Age Secs</FONT></SPAN></SPAN></B><FONT size=4><SPAN lang=EN-US> </SPAN></SPAN><span id="wmqeeuq" class=dialog-label><SPAN style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">是会话</SPAN><SPAN lang=EN-US>cookie</SPAN></SPAN><span id="wmqeeuq" class=dialog-label><SPAN style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">的超时时_讄于</SPAN><SPAN lang=EN-US>0</SPAN></SPAN><span id="wmqeeuq" class=dialog-label><SPAN style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">表示不限制?/SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></FONT></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 57.75pt"><span id="wmqeeuq" class=dialog-label><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US><FONT size=4>Session Invalidation Interval Secs</FONT></SPAN></SPAN></B><FONT size=4><SPAN lang=EN-US> </SPAN></SPAN><span id="wmqeeuq" class=dialog-label><SPAN style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">查过?/SPAN><SPAN lang=EN-US>session</SPAN></SPAN><span id="wmqeeuq" class=dialog-label><SPAN style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">的周?/SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></FONT></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 57.75pt"><span id="wmqeeuq" class=dialog-label><B style="mso-bidi-font-weight: normal"><FONT size=4><SPAN lang=EN-US>Session Timeout Secs</SPAN> session</FONT></SPAN></B></SPAN><span id="wmqeeuq" class=dialog-label><FONT size=4><SPAN style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">的超时时?/SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 57.75pt; TEXT-INDENT: -15.75pt; mso-list: l0 level1 lfo1; tab-stops: list 57.75pt"><FONT size=4><span id="wmqeeuq" class=dialog-label><SPAN lang=EN-US style="mso-fareast-font-family: 'Times New Roman'"><SPAN style="mso-list: Ignore">4?/SPAN></SPAN></SPAN><span id="wmqeeuq" class=dialog-label><SPAN lang=EN-US>Jdbc</SPAN></SPAN><span id="wmqeeuq" class=dialog-label><SPAN style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">q接池的配置</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></FONT></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 57.75pt"><span id="wmqeeuq" class=dialog-label><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US><FONT size=4>URL</FONT></SPAN></SPAN></B><FONT size=4><SPAN lang=EN-US> </SPAN></SPAN><span id="wmqeeuq" class=dialog-label><SPAN style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">q接池地址</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></FONT></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 57.75pt"><span id="wmqeeuq" class=dialog-label><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US><FONT size=4>Driver Classname</FONT></SPAN></SPAN></B><FONT size=4><SPAN lang=EN-US> </SPAN></SPAN><span id="wmqeeuq" class=dialog-label><SPAN style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">Q?/SPAN><SPAN lang=EN-US>jdbc</SPAN></SPAN><span id="wmqeeuq" class=dialog-label><SPAN style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">驱动cd</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></FONT></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 57.75pt"><span id="wmqeeuq" class=dialog-label><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US><FONT size=4>Properties</FONT></SPAN></SPAN></B><FONT size=4><SPAN lang=EN-US> </SPAN></SPAN><span id="wmqeeuq" class=dialog-label><SPAN style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">Q属性,例如</SPAN><SPAN lang=EN-US>user=examples<o:p></o:p></SPAN></SPAN></FONT></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 57.75pt"><span id="wmqeeuq" class=dialog-label><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US><FONT size=4>Password</FONT></SPAN></SPAN></B><FONT size=4><SPAN lang=EN-US> </SPAN></SPAN><span id="wmqeeuq" class=dialog-label><SPAN style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">Q密?/SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></FONT></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 57.75pt"><span id="wmqeeuq" class=dialog-label><B style="mso-bidi-font-weight: normal"><FONT size=4><SPAN lang=EN-US>Initial Capacity</SPAN> </FONT></SPAN></B></SPAN><span id="wmqeeuq" class=dialog-label><FONT size=4><SPAN style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">Q初始连接数</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 57.75pt"><span id="wmqeeuq" class=dialog-label><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US><FONT size=4>Maximum Capacity</FONT></SPAN></SPAN></B><FONT size=4><SPAN lang=EN-US> </SPAN></SPAN><span id="wmqeeuq" class=dialog-label><SPAN style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">Q最大连接数</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></FONT></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 57.75pt"><span id="wmqeeuq" class=dialog-label><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US><FONT size=4>Capacity Increment</FONT></SPAN></SPAN></B><FONT size=4><SPAN lang=EN-US> </SPAN></SPAN><span id="wmqeeuq" class=dialog-label><SPAN style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">Q连接池每次增加q接的数?/SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></FONT></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 57.75pt"><span id="wmqeeuq" class=dialog-label><SPAN lang=EN-US><o:p><FONT size=4> </FONT></o:p></SPAN></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 57.75pt"><span id="wmqeeuq" class=dialog-label><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US><FONT size=4>Statement Cache Type</FONT></SPAN></SPAN></B><FONT size=4><SPAN lang=EN-US> </SPAN></SPAN><span id="wmqeeuq" class=dialog-label><SPAN style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">Q?/SPAN></SPAN><span id="wmqeeuq" class=dialog-help><SPAN lang=EN-US>prepared statements</SPAN></SPAN><span id="wmqeeuq" class=dialog-help><SPAN style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">~存的策略,</SPAN><SPAN lang=EN-US>LRU</SPAN></SPAN><span id="wmqeeuq" class=dialog-help><SPAN style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">法在有新的语句到来Ӟ最不经常被用得语句调整出缓存?/SPAN><SPAN lang=EN-US>FIXED</SPAN></SPAN><span id="wmqeeuq" class=dialog-help><SPAN style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">法为先q先出的法</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></FONT></P><span id="wmqeeuq" class=dialog-label><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA"><FONT size=4>Statement Cache Size</FONT></SPAN></SPAN></B><FONT size=4><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA"> </SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">Q缓存中语句的最大数量,调整q个数值的大小Q有利于提高pȝ的效率?/SPAN></FONT><img src ="http://www.aygfsteel.com/xiaomage234/aggbug/6337.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/xiaomage234/" target="_blank">马?/a> 2005-06-18 14:59 <a href="http://www.aygfsteel.com/xiaomage234/articles/6337.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>weblogic培训W记Q一Qweblogic Server内部l构和相关的配置http://www.aygfsteel.com/xiaomage234/articles/6336.html马?/dc:creator>马?/author>Sat, 18 Jun 2005 06:57:00 GMThttp://www.aygfsteel.com/xiaomage234/articles/6336.htmlhttp://www.aygfsteel.com/xiaomage234/comments/6336.htmlhttp://www.aygfsteel.com/xiaomage234/articles/6336.html#Feedback0http://www.aygfsteel.com/xiaomage234/comments/commentRss/6336.htmlhttp://www.aygfsteel.com/xiaomage234/services/trackbacks/6336.htmlweblogic Server内部l构图:

r_3333.jpg
(一) 
原理单说?/SPAN>

服务器启动,׃l定到相应的端口QƈZ个端口分配一个线E以接受q接hQ一旦服务器接受到连接请求ƈ建立好连接以后,监听U程处理权交给套接字复用器Q套接字复用器进行一定的处理Qƈ会负责选择利用那个执行队列q将h|入其中。当有一个请求进入执行队列,׃有一个空闲的执行县城从该队列里面取走q向调用者返回结果?/SPAN>

(?  执行队列和执行线E的相关配置

执行U程数量有一定的限制Q在服务器启动的时候,已lŞ成了一个含有一定数量执行线E的池,执行U程可能?/SPAN>servletQ?/SPAN>ejb?/SPAN>jdbc{,׃执行U程仅当E序成功l束或者出现异常才能被释放l箋处理其他hQ所以如果执行线E执行的不够快,而请求又多的情况下,׃造成执行队列的阻塞?/SPAN>

相关的配|信息有Q?/SPAN>

server菜单?/SPAN>?/SPAN>configuration?/SPAN>---〉高U配|?/SPAN>---?/SPAN>Config Execute Queues中的配置如下:

1?/SPAN>Queue Length队列长度Q执行队列的长度

2?/SPAN>Queue Length Threshold Percent 一个百分数Q当request的数量达到队列长度的q个比例的时候,weblogic会发?/SPAN>overflow的标志信息?/SPAN>

3?/SPAN>Thread Count 服务器初始创建的执行U程的数?/SPAN>

4?/SPAN>Thread Increase 如果weblogic发出overflow的标志信息,weblogic会尝试增加这个数量的执行U程Q以解决处理矛盾?/SPAN>

5?/SPAN>Threads Maximum最大执行线E数

6?/SPAN>Threads Minimum最执行线E数

7?/SPAN>Thread PriorityU程优先U?/SPAN>

另外server菜单?/SPAN>?/SPAN>configuration?/SPAN>---?/SPAN>tuning子页中还有一些相关的配置Q?/SPAN>

1?SPAN style="FONT: 7pt 'Times New Roman'">  Stuck Thread Max Time 黏联U程旉Q超q这个时间没有返回的执行U程Q系l将认ؓ是黏联线E?/SPAN>

2?SPAN style="FONT: 7pt 'Times New Roman'">  Stuck Thread Timer Interval pȝ查黏联线E的旉间隔

如果weblogic认ؓ某个队列中的所有的U程全部黏联的话Q?/SPAN>weblogic会增加执行U程的数量?/SPAN>

注意Q执行线E的数量一旦增加,目前weblogic不会d他Q如果增加了一些线E以后再ơ出?/SPAN>overflow的警告,weblogic会l增加执行线E的数量Q一直到辑ֈ上限为止?/SPAN>

(?  套接字复用器的相关配|?/SPAN>

Weblogic带有两个版本的套接字复用器,U?/SPAN>java版和本地接口版(jniQ,一般来说在讉K量小的情况下Q?/SPAN>java版比jni版性能要好一些,因ؓjni?/SPAN>API调用会损׃部分性能Q但是访问量大的情况Q一般都?/SPAN>jni版的性能比较好,所以尽量保?/SPAN>weblogic实用本地接口版的套接字复用器?/SPAN>

相关的配|参数有两个Q在server菜单?/SPAN>?/SPAN>configuration?/SPAN>---?/SPAN>tuning子页中的W一个和W二个配|项?/SPAN>

Enable Native IO Q启用本?/SPAN>IOQ勾选这个配|以后,weblogic׃启用本地接口版的套接字复用器

Socket Readers Q如果不选上一个选项Q则q个选项可用Q也是?/SPAN>java版的套接字复用器会被启用Qƈ且,java版的复用器会从执行线E中抽出q个比例的线E用于处?/SPAN>socket的请求?/SPAN>



]]>
DB2常用命o介绍http://www.aygfsteel.com/xiaomage234/articles/6016.html马?/dc:creator>马?/author>Mon, 13 Jun 2005 00:44:00 GMThttp://www.aygfsteel.com/xiaomage234/articles/6016.htmlhttp://www.aygfsteel.com/xiaomage234/comments/6016.htmlhttp://www.aygfsteel.com/xiaomage234/articles/6016.html#Feedback0http://www.aygfsteel.com/xiaomage234/comments/commentRss/6016.htmlhttp://www.aygfsteel.com/xiaomage234/services/trackbacks/6016.html1Q?nbsp;启动数据?BR>    db2start
2Q?nbsp;停止数据?BR>    db2stop
3Q?nbsp;q接数据?BR>    db2 connect to databasename user db2 using pwd
4Q?nbsp;获得数据库管理程序配|?BR>    db2 get dbm cfg
5Q?nbsp;更改数据库管理程序配|?BR>    db2 update dbm cfg using 参数?参数?BR>6Q?nbsp;获得数据库的配置
    db2 connect to databasename user db2 using pwd
    db2 get db cfg for databasename
7Q?nbsp;更改数据库的配置
    db2 connect to databasename user db2 using pwd
    db2 update db cfg for databasename using 参数?参数?BR>8Q?nbsp;关闭所有应用连?BR>    db2 force application all
    db2 force application ID1,ID2,,,Idn MODE ASYNC
    (db2 list application for db databasename show detail)
9Q?nbsp;备䆾数据?BR>    db2 force application all
    db2 backup db databasename to d:
   (db2 initialize tape on
\\.\tape0)
   (db2 rewind tape on
\\.\tape0)
   db2 backup db databasename to
\\.\tape0
10Q?nbsp;恢复数据?BR>   db2 restore db databasename from d: to d:
   db2 restore db databasename from
\\.\tape0 to d:
11Q?nbsp;l定存储q程
  db2 connect to databasename user db2 using pwd
  db2 bind c:\dfplus.bnd
 拯存储q程到服务器上的C:\sqllib\function目录?BR>12Q?nbsp;重组?BR>   db2 connect to databasename user db2 using pwd
   db2 reorg table ydd
   db2 runstats on table ydd with distribution and indexes all
13Q?nbsp;导出表数?BR>    db2 export to c:\dftz.txt of del select * from dftz
    db2 export to c:\dftz.ixf of ixf select * from dftz
14Q?nbsp;导入表数?BR>import from c:\123.txt of del  insert into ylbx.czyxx
db2 import to c:\dftz.txt of del commitcount 5000 messages  c:\dftz.msg insert into dftz
db2 import to c:\dftz.ixf of ixf commitcount 5000 messages c:\dftz.msg insert into dftz
db2 import to c:\dftz.ixf of ixf commitcount 5000 insert into dftz
db2 import to c:\dftz.ixf of ixf commitcount 5000 insert_update into dftz
db2 import to c:\dftz.ixf of ixf commitcount 5000 replace into dftz
db2 import to c:\dftz.ixf of ixf commitcount 5000 create into dftz   (仅IXF)
db2 import to c:\dftz.ixf of ixf commitcount 5000 replace_create into dftz  (仅IXF)
15Q?nbsp;执行一个批处理文g
      db2 -tf 批处理文件名
     Q默认文件中每一条命令用 Q结束)
16Q?nbsp;自动生成批处理文?BR>    建文本文Ӟtemp.sqlQ内容如下:
  select 'runstats on table DB2.' || tabname || ' with distribution and  detailed indexes all;' from syscat.tables where tabschema='DB2' and type='T';
db2 -tf temp.sql>runstats.sql
17Q?nbsp;自动生成Q视图)语句
在服务器上:C:\sqllib\misc目录?BR>db2 connect to databasename user db2 using pwd
db2look -d databasename -u db2 -e -p -c c:\databasename .txt
18Q?nbsp;授权命o
grant dbadm on database to user bb
19Q?nbsp;列出所有的pȝ?
list tables for system
20.  查看表结?
db2 describe select * from user.tables
 db2 describe table user.tables
21. CatalogQ编目数据库或节?BR>db2 catalog tcpip node nodename remote ip server port
db2 catalog db dbname as dbalias at node nodename
22. UncatalogQ功能与上相反,删除已经~目的数据库或节?BR>注:执行完catalog或者uncatalog后,需要执行terminateQ实现刷新目录列表的作用。Terminate的功能是l止clp的后台进E,在此clp下的q接全部断开Q同时本q接下做的数据库更改做一个内部提交?BR>23. AttachQ?BR>建立一个到数据库实例的q接Q执行实例别的命oQ比如create databaseQforce applications{,需要实例的用h限?BR>24. ListQ?BR>昄一些数据库对象或者设|的相关信息
25. LoadQ导入数?BR>注意自动生成列数据导入问题:需要加MODIFIED BY  GENERATEDMISSINGQ可IZ保持I),  GENERATEDIGNOREQ非I将d默认Q可I将保持I状态), GENERATEDOVERRIDELOADQ非IZ导入原来表中的|比较有用Q?BR>

 



]]>
(?让LoadRunnerC坛http://www.aygfsteel.com/xiaomage234/articles/5750.html马?/dc:creator>马?/author>Wed, 08 Jun 2005 09:09:00 GMThttp://www.aygfsteel.com/xiaomage234/articles/5750.htmlhttp://www.aygfsteel.com/xiaomage234/comments/5750.htmlhttp://www.aygfsteel.com/xiaomage234/articles/5750.html#Feedback0http://www.aygfsteel.com/xiaomage234/comments/commentRss/5750.htmlhttp://www.aygfsteel.com/xiaomage234/services/trackbacks/5750.html
来自www.51testing.com论坛 原创作者: sunshinelius QLoadRunner版版主)

Loadrunner无疑是一个强大有力的压力试工具。它的脚本可以录制生成,自动兌Q测试场景可以面向指标,多方监控Q测试结果图表显C,拆分l合。相信有h象过Q拿着一张性能指标标准列表和测试数据相比较Q如同PH试纸一P遇碱则蓝Q遇酸则U,一目了Ӟ之后可以大声地喊道Q我扑ֈ了Y件系l的性能瓉Q?
然而,我们无论在loadrunner前面加多个“强大”、“智能”的形容词,别忘了其最l修饰的只是一个名词-“工具”。《大话西游》中也有相当_辟的论断:官兵Q最多也只是个长了痔疮的官兵Q把loadrunner比喻成长了痔疮的官兵有点_俗Q但loadrunner它是个工P那么是否能够扑ֈ性能瓉取决于使用工具的hQ而不是工hw。要做一个成功的性能试Q仅L和精通了loadrunner的用手册是不够的,q需要对被测软gpȝ的方斚w面都要有了解Q比如Y件体pLӞ|络拓扑{知识。这如同一个技艺高的木匠Qƈ不是因ؓ他背熟了凿子Q锤子的说明书,而是他能l合木材的质地和寸Q用凿子和锤子这些工具做Z把精巧的椅子来。那么在性能试中,人的智慧zd体现在哪里呢Q?


一Q首先性能试也是试的一U,q就意味着做性能试也要写测试案例。你所作的性能试能不能以支持找出性能试瓉Q和你在初期设计的测试案例关pȝ为重要。我曑ֆq对一个Y件系l的不下十个性能试场景案例Q等后来q行时却发现我必d补几个案例才能找到瓶颈,而原来十多个案例其实重复甚多。如果你要写出好的不重复的性能试案例来,你就得对被测软gpȝ有一定的了解?
在这里,我顺便插一句,在目前测试界d争论试人员需不需要懂~程Q需不需要有开发经验这U问题,q完全是本末倒置Q忘C试人员的目标是什么,试目标是写出好的试案例Q好的测试案例就是发C一个原来未曑֏现的软gbug。那么一个测试h员知识体pL否够用的标准是能不能写Z个好的测试案例。而针对不同类型的试Q所需的知识深度是不一LQ有的是不需~程知识Q比如界面测试;有的是必L开发经验的Q比如接口测试,不能一概而论?
对于性能试来讲Q我个h认ؓQ测试h员倒不一定非要有开发经验,但是应该有一个对软g体系l构了解全面的知识。ؓ什么呢Q做性能试Ӟ如果从客L施压一ơ就W合性能指标Q碰到这U情冉|偷着乐吧Q因为在你的指标场景下,软gpȝ中就不存在性能瓉Q您也就不用费心L了。但是大多数情况下,我们在做性能试Ӟ都不能顺利达到性能指标Q可能server响应时了,也可能是用户L了,在日志里抛出了一堆errorQ这U情形是非常常见Q所以在我们在一开始设计性能试ҎӞ应该考虑为寻找性能瓉而设计测试案例。这时我们就需要知道在整个软gpȝ中,有哪些节点,在哪些地方可能存在瓶颈,比如一个B/Spȝ有IE client→物理网l→web server→app server→DBq样的一个压力流丌Ӏ每个节点的每个模块都有可能成ؓ瓉。瓶颈的产生可能׃模块配置引vQ也可能׃模块本n引v。这都需要我们设计测试案例来发现的。一般地Q我自己常用的感觉也比较方便的方法是Q设计一l性能试案例来验证一个节Ҏ否存在瓶颈,q组case中尽量保持其他节点不变,来改变这个节点的配置Qƈ监控此节点的各种指标。这里说h有很多话了Q不是一a两语能说得清的。以后有旉可以找个专题来慢慢跟大家讨论?


二.使用loadrunner的VU生成脚本。脚本的生成方式׃U,一U是自写或嵌入源代码Q一U是录制生成。常常听见有Q这两种方式中首选录制生成脚本,因ؓ它简单且化。但我个人总觉得手写脚本要好一些,因ؓQ?
1Q可L好Q流E清晎ͼ查点截取含义明确。业务的代码读hL协议U的代码更易让h理解Q也更容易维护,必要时可建立一个脚本库。而录制生成的代码大多没有l护的h|现炒现卖?
2Q手写的E序相比录制的脚本更能真实地模拟应用q行。因为录制的脚本是截获了|络包,生成了协议的代码,而略掉了client端的处理逻辑。D个例子,用VU录制一个运行script和applet的IE行ؓQ它只会生成http协议的APIQ在IE中运行的applet和script不会被模拟到Q这׃是一个完整的pȝ?
3Q手写程序相比录制脚本更能增加测试h员的技术含量。开发和试能力双重提高Q何乐而不为呢Qloadrunner提供了java userQvb userQc user{语acd的脚本,是l我们开发脚本用的,而不是录制用的?
脚本不管录制也好Q还是手写也好,选择的时候应该以脚本模拟E序真实有效为准Q结合项目进度,开发难易程度等因素考虑?
在这里我惌说的是,开发一个好的脚本是成功性能试的必要条件。一个好的脚本应该能够最大程度再现clientE序行ؓ。如上面那个例子Q脚本只模拟了client端的部分行ؓQ有一些没有模拟到Q那么client的瓶颈就有可能被忽略了。我曑֐q一个亏Q自己写了一个java socket脚本去联serverQ但是忽略了client端的界面下的业务逻辑Q用我的脚本做性能试通过Q全部OKQ但是真实用户一上线Qclientl端界面接受了大量的server信息Q导致clientq程L了。痛哉,痛哉?/FONT>


三.l徏q执行性能试场景?
从VUq行成功到controllerq行成功Q一般需要以下几个步骤(我也是从英文论坛上看到的Q觉得不错,拿出来共享)Q?
1. 认在VU里SUSIQ单用户单@环次数single user & single iterationQ?
2. 认在VU里SUMIQ单用户多@环次数single user & multi iterationQ?
3. 认在controller中MUSIQ多用户单@环次数multi user & single iterationQ?
4. 认在controller中MUMIQ多用户多@环次?multi user & multi iterationQ?


做这样一个步骤划分是有道理的Q第一步骤是验证脚本编写的正确Q第二步骤可以验证数据池是否正常q作。第三步骤验证ƈ发功能,W四步骤是最l目的,验证软gpȝ的性能。在论坛上看C些朋友提的问题,有一些就是于此的Q在controller中运行场景时出现问题Q首先得保证VU中运行成功,q是一个显然的逻辑。Y件工E中把Y件开发的U种行ؓ都要制定一个proccessQ即q程Q性能试也是如此Q按照过E来调试脚本和场景,能及早发现问题和定位问题。除非是高手Q烂熟于心中Q才能超proccess而不出问题?
场景是把虚拟用户和交易数按一定规则组lv来去模拟真实世界的业务行为。这其实是把单个用户的行为复Ӟq接。场景的l织通常和真实世界的业务规则有很大关pR?
做个如下可能q不恰当的比喻:
脚本像演员,场景像表演的舞収ͼ而测试工E师是导演,多少个演员,怎么在舞C演出Q都由导演说了算Q而剧情又不能谱Q脱ȝ实,否则p研R了。注意,导演的职责不光是保演出能顺利结束,而且q要同时观察和收集观众的反馈信息Q以认q次演出是否成功?
同样的也是,性能试人员不光是看场景是否得到利的执行,同时q要攉各个server的反馈信息,以确认Y件系l的性能表现是否正常?
在真实世界中的用户业务规则要转换到可操作的性能指标是需要分析和计算的。当然这通常是市场需求分析h员干的活Q但我觉得测试h员应该在做性能试Ӟ对这些指标进行理解,知道Z么要q样做。有时有的性能指标q不清楚和准,q需要测试h员来分析。比如一个性能指标Q要求Y件系l支持每分钟700用户的登陆行为。这对于试人员来说Q其实是一个不切的性能需求。这指的是瞬时ƈ发用?00Q在一分钟的响应时间要求下登陆pȝQ还是在一分钟内陆l有700个用L入Y件系l即可?q两U场景其实对软gpȝ的压力是不同的,W一U显然大Q第二种要小一些。甚x的性能需求就是支?0000注册用户Q这U需求就更需要分析了Q还要引入一些业务发生概率算法模型来做。这已经不是性能试人员的职责了Q但׃目前有不Y件公司流E不规范Q或者有程没执行,q些工作都要试人员来做了,不过也好Q正好是ȝ的机会?


四.分析l果数据Q找到Y件系l性能瓉
上面说了Q做了那么多Q就是ؓ了本步骤Q寻找Y件系l性能瓉?
个h认ؓL性能瓉是一个非常有挑战性的工作Q毛d曄说过Q一个优U的指战员是能够Ҏ已有的客观Ş势,制定作战计划Q然后在作战q程中,发现计划与执行不W的地方Q分析,然后调整作战计划Q羃计划和战势的误差。简明一句:是一个理论和实践l合的过E,一个h的主观思想和客观现实的l合q程Q注明:本h是毛d老h家的忠实fansQ?
在性能试中,试Ҏ是我们的作战计划,执行性能试是我们的作战战场。在性能试中,可能会发现种U意想不到的问题。当然一个经验够丰富的性能试专家可能会在试之前p考虑全面Qɋ试Ҏd试执行实际情况Qƈ一举找出性能瓉。我sunshinelius不是专家水^Q当然就要匆忙应对和分析性能试中出现的问题Qƈ有可能会修改试ҎQ增加必要的test caseQ删除没用的test case。MQ性能试是一个不断修Ҏ试方案,反复执行test case的过E,直至来D性能瓉。在此过E中Q需要了解很多的知识Q知识了解得多Q就接qY件系l运行的真相Q也p扑և性能瓉了?
比如Qloadrunner要是调用E序员的E序Q服务器资源占用情况可能是追查瓶颈的一个线索,但如果是标准中间Ӟ那就没那么简单了Q比如oracle数据库的某项参数讑־不对Q照样会造成数据库瓶颈,应用E序调用数据库的API写法不对Q比如未使用软解析变量,也有可能D数据库瓶颈。这些瓶颈都不会反映在cpuQ内存用量上等指标上的?
对于q种情况Q一斚w需要对中间件有一定的了解Q知道哪些参数有什么作用,怎么可调的,另外q可能用中间g的专有监工P来分析。lr的性能计数器是不够用的?
个h体会Q查扄颈的难易E度Q由易到?
服务器硬件瓶?〉网l瓶?〉应用瓶?〉服务器操作pȝ瓉Q参数配|)-〉中间g瓉Q参数配|,数据库,web服务器等Q?
记忆比较深刻的一ơ,用lr做了两天性能试Q指标上不去Q后来用oracle数据库的囑Ş化性能工h发现某个表的查询处理旉长Q原来烦引创建得不合理,把表的烦引改了之后,性能E有提高Q但q是上不厅R再ơ排查,发现应用中有一个sql语句写得有问题,长而且耗时Q改了之后,试指标q是上不?
l过臛_四轮的排查,才大功告成,最后一个除掉的瓉是操作系l问题(开始没有想到它Q后来看pȝ消息Q才发现已经有错误报出)



]]>
(?BEA WebLogicq_下J2EE调优ȝhttp://www.aygfsteel.com/xiaomage234/articles/5745.html马?/dc:creator>马?/author>Wed, 08 Jun 2005 08:55:00 GMThttp://www.aygfsteel.com/xiaomage234/articles/5745.htmlhttp://www.aygfsteel.com/xiaomage234/comments/5745.htmlhttp://www.aygfsteel.com/xiaomage234/articles/5745.html#Feedback0http://www.aygfsteel.com/xiaomage234/comments/commentRss/5745.htmlhttp://www.aygfsteel.com/xiaomage234/services/trackbacks/5745.html摘要Q?

  随着q来J2EE软gq泛地应用于各行各业Q系l调优也来引赯Y件开发者和应用服务器提供商的重视。而对于最l客h_在一个高效、稳定地实现他们的业务需求已l是他们的基本要求。所以J2EE调优昑־非常重要Q而BEA WebLogic Server是业界领先的应用服务器,BEA WebLogicq_下的J2EE调优也就ؓ重要,她将为我们提供普遍的J2EE调优Ҏ。最q网l、杂志上的J2EE调优文章层出不穷。本Z自己^时工作中的一些经验积累分享给大家Q抛砖引玉?/FONT>


目录

?a
W一?应用E序调优
1.1.1 通用代码调优
1.1.2 减小没有必要的操?/FONT>
1.1.3 使用合适的cd
1.1.4 量使用pool,buffer和cache
1.2 JDBC代码调优
1.2.1 严格资源使用
1.2.2 实用技?/FONT>
1.2.3 优化SQL语句
1.3 Web代码调优
1.3.1 HttpSession的?/FONT>
1.3.2 JSP代码调优
1.3.3 Servlet代码调优
1.4 JMS代码调优
1.4.1 注意必要的事,避免使用不必要的特征
1.4.2 消息cd的选择
1.4.3 认方式的选择和JMS事务
1.5 EJB代码调优
1.5.1 有效使用设计模式
1.5.2 使用EJB和WebLogic的特?/FONT>
1.5.3 ~存资源
1.5.4 如何选择和用Entity Bean
1.5.5 其他的一些小技?/FONT>
W二?应用服务器调?/FONT>
2.1 JVM调优
2.1.1 垃圾攉和堆大小
2.1.2 jRockit调优
2.2 Server调优
2.2.1 量使用本地I/O?/FONT>
2.2.2 调整默认执行U程?/FONT>
2.2.3 调整q接参数
2.2.4 创徏新的执行队列
2.3 JDBC调优
2.3.1 调整q接池配|?/FONT>
2.4 WEB调优
2.4.1 调整WEB应用描述W?/FONT>
2.5 JMS调优
2.6 EJB调优
2.6.1 调整pool和cache
2.6.2 优化事务隔离U别和事务属?/FONT>
2.6.3 其他一些小技?/FONT>
W三?数据库调?/FONT>
3.1.1 Oracle性能优化
3.1.2 Oracle的其他调?/FONT>
W四?操作pȝ调优
4.1 操作pȝ调整
4.1.1 HP-UX
4.1.2 Solaris
4.1.3 AIX
4.1.4 Linux
4.1.5 Windows
W五?性能监控和性能分析
5.1 性能瓉
5.2 操作pȝ监控
5.3 数据库监?/FONT>
5.4 WebLogic监控
5.4.1 JVM监控
5.4.2 Console监控
5.4.3 实用工具分析
5.5 应用E序分析
ȝ
参考文?/FONT>
关于作?/FONT>

?a (目录)

  随着q来J2EE软gq泛地应用于各行各业Q系l调优也来引赯Y件开发者和应用服务器提供商的重视。而对于最l客h_在一个高效、稳定地实现他们的业务需求已l是他们的基本要求。所以J2EE调优昑־非常重要Q而BEA WebLogic Server是业界领先的应用服务器,BEA WebLogicq_下的J2EE调优也就ؓ重要,她将为我们提供普遍的J2EE调优Ҏ。最q网l、杂志上的J2EE调优文章层出不穷。本Z自己^时工作中的一些经验积累分享给大家Q抛砖引玉?BR>
  本文从J2EE应用架构Q下图)来分别剖析系l调优,首先我们一般会从应用程序出发,d总码,做到代码U的优化Q然后再调整应用服务?BEA WebLogic8.1)和数据库 (Oracle9i)的参敎ͼ最后当然是调整操作pȝ和网l的性能(包括g升)。诚?在我遇到的很多项目中,都是出现了性能问题后才惛_调优,而且一般都是先q行pȝ参数调整,实在解决不了才会对代码进行检?实际?我们应当代码的调优放在应用设计时来做,试生时修改代码将是一件极其痛苦的事情?/FONT>


WebLogicq_J2EE应用架构


W一?应用E序?/B>?/FONT>(目录)
1.1.1 通用代码调优

1.1.2 减小没有必要的操?/B>
  对象的创建是个很昂贵的工?所以我们应当尽量减对象的创徏,在需要的时候声明它,?始化?不要重复初始化一个对?量能做到再使用,而用完后|null有利于垃圾收集。让cd现Cloneable接口,同时采用工厂模式,减类的创?每次都是通过clone()Ҏ来获得对象。另外用接口也能减类的创建。对于成员变量的初始化也应尽量避? 特别是在一个类z另一个类时?BR>
  异常抛出Ҏ能不利。抛出异帔R先要创徏一个新的对象。Throwable接口的构造函数调用名? fillInStackTrace()的本圎ͼNativeQ方法,fillInStackTrace()Ҏ查堆栈,攉调用跟踪信息。只要有异常被抛出,VM必调整调用堆栈,因ؓ在处理过E中创徏了一个新的对象?异常只能用于错误处理Q不应该用来控制E序程?BR>
  此外, 关闭Debug输出,量用串行化、同步操作和耗时昂贵的服?如Date())?/FONT>

1.1.3 使用合适的cd

  当原始类型不能满x们要求时,使用复杂cd。String和StringBuffer的区别自不必说了,是我们用最多的cd,在涉及到字符q算?强烈使用StringBuffer。在做String匚w时用intern()代替equal()?BR>
  带有final修饰W的cL不可z? 如果指定一个类为finalQ则该类所有的Ҏ都是final?BR>
  Java~译器会LZ内联所有的finalҎ,q将能够使性能q_提高50%。类的属性和方式使用final或者static修饰W也是有好处的?BR>
  调用Ҏ时传递的参数以及在调用中创徏的时变量都保存在栈QStackQ中Q速度较快。所以尽量用局部变量?BR>
  ArrayList和Vector,HashMap和Hashtable是我们经常用到的c?前者不支持同步,后者支持同?前者性能更好,大多数情况下选择前者?/FONT>

1.1.4 量使用pool,buffer和cache
  使用pool、buffer和cache能大大提高系l的性能,q在J2EE的大部分技术中都是适用的?BR>
  在WebLogic中就大量使用了池:JDBC Connection Pool、Socket Pool、Object Pool和Thread Pool。I/O操作?buffer是必ȝ,特别是对大文件的操作,不然Ҏ造成内存溢出。字节操作最?所以尽可能采用write(byte[])QBuffered FileOutputStream比Buffered FileWriter要快,因ؓFileWriter需要Unicode到Byte的{换?BR>
  而后面讲到的JDBC、JSP、EJB和JMS我们都非常徏议用buffer和cache。ؓHttpServletResponse讄buffersize,使用wl-cache,~存在JNDI树上获取的对象等{?BR>
  此外,使用JDK 1.4的非dI/OҎ能也有很大提高?


1.2 JDBC代码调优
1.2.1 严格资源使用
  JDBC代码调优最大的原则是使用WebLogic的连接池,而不是自qq数据库。在我接触的很多自己实现q接池的目?大部分遇到死锁和q接泄漏的问题,最后得不得修改代码。而WebLogic提供了功能强大,性能良好的数据库q接池,我们要做的只是封装一个连接管理类Q从JNDI树上获取数据源ƈ~存Q得到连接,q提供一pd关闭数据库资源的Ҏ?BR>
  对Q何资源用的原则是用完即养I不管是数据库资源、上下文环境Q还是文件。数据库资源的泄漏极易造成内存泄漏Q乃至系l崩溃。在使用完数据库资源后依ơ关闭ResultSetQStatement和ConnectionQ而在一个数据库q接多次q行数据库操作时要特别注意ResultSet和Statement依次关闭?BR>
try{
  //open connection
  pstmt =conn.prepareStatement(strSql1);
  pstmt.executeUpdate();
  pstmt.close();
  pstmt =conn.prepareStatement(strSql2);
  rs=pstmt.executeQuery();
  while (rs.next()){
  //process
 }
rs.close();
pstmt.close();
 }catch(Exception e){
  //close rs,psmt,con
}finally{
  //close rs,psmt,con
}


1.2.2 实用技?/B>
  在JDBC操作中还有一些小的技巧跟大家分nQ由于获取连接时默认自动提交方式Q用connection.setAutoCommit(false)关闭自动提交Q用PreparedStatement,扚w更新,业务复杂或者大数据量操作时使用存储q程Q尽量用RowSetQ此外设|记录集d~存FetchSize和设|记录集d方向FetchDirectionҎ能也有一定的提高?/FONT>

1.2.3 优化SQL语句
  SQL语句的优化牵涉到很多数据库的知识Q需要与索引配合Q因此需要DBA对代码中的SQLq行查测试。常见的Qselect *不提倡用,效率极差Q徏议显式获取列Q即使是所有字D也应罗列,而取L时用count(*),为提高cache的命中率Q尽量做到SQL重用。对于大数据量的查询Q可以充分利用Oracle数据库的Ҏ,每次取出m-n行的数据Q实现分|询。另外,提高性能的好选择可能是把所有的字符数据都保存ؓUnicodeQJava以Unicode形式处理所有数据,因此Q数据库驱动E序不必再执行{换过E?/FONT>

1.3 Web代码调优
1.3.1 HttpSession的?/B>
  应用服务器保存很多会话时Q容易造成内存不Q所以尽量减session的用,攄session
里的对象不应该是大对象,最好是单小对象Q实C行化接口。当会话不再需要时Q应当及时调用invalidate()Ҏ清除会话。而当某个变量不需要时Q及时调用removeAttribute()Ҏ清除变量。请勿将EJB对象攄在session中?/FONT>

1.3.2 JSP代码调优
  目前Q在JSP面中引入外部资源的Ҏ主要有两U:include指oQ以及include动作?include指oQ例?lt;%@ include file="copyright.html" %>Q该指o在编译时引入指定的资源。在~译之前Q带有include指o的页面和指定的资源被合ƈ成一个文件。被引用的外部资源在~译时就定Q比q行时才定资源更高效?BR>include动作Q例?lt;jsp:include page="copyright.jsp" />。该动作引入指定面执行后生成的l果。由于它在运行时完成Q因此对输出l果的控制更加灵zR但是,只有当被引用的内定wJ地改变Ӟ或者在对主面的请求没有出C前,被引用的面无法定Ӟ使用include动作才合?

  对于那些无需跟踪会话状态的jspQ关闭自动创建的会话可以节省一些资源。用如下page指oQ?<%@ page session="false"%> ;量不要JSP面定义为单U程Q应讄?lt;%@page isThreadSafe=”true?>;在JSP面最好用输出缓存功能,? <%@page buffer="32kb"%>;量用wl:cache定制标记来缓存静态或相对静态的内容Q缓存jsp:include操作的结果能显著提高应用E序的运行性能?/FONT>

1.3.3 Servlet代码调优
  Servlet代码调优比较单:在Servlet之间跌{Ӟforward比sendRedirect更有效;讄HttpServletResponse ~冲区,如:response.setBufferSize(20000);在init()Ҏ里缓存静态数据,而在destroy()中释攑֮Q徏议在Servlet里用ServletOutputStream输出囄{对象;避免在Servlet和Jsp中定界事务等?/FONT>

1.4 JMS代码调优
1.4.1 注意必要的事,避免使用不必要的特征
  JMS提供了强有力的消息处理机Ӟ但是Z最大限度的提高JMSpȝ的性能Q应避免使用不需要用的特征Q同时也要注意必要的事项。比如:量使用接收E序能直接用的最单、最的消息cdQ消息选择器要可能简?最好不使用)Q尽量不要用复杂的操作W,如like、in或者between{?使用字符串数据类型的速度最?务必为特定的应用E序定义特定的JMSq接工厂Qƈ且禁用默认的JMSq接工厂Q不要在javax.*与weblogic.*的名字空间中使用JNDI名称Q尽量用异步消费者,U程不必锁以等待消息的到达;使用完JNDI树上的资源后注意关闭?/FONT>

1.4.2 消息cd的选择
  标准JMS提供了五U消息类型,而TextMessage应用最为普? 当发送的消息是几U原始数据类型的集合体时Q最好用MapMessage消息cdQ而不要用ObjectMessageQ以便减不同系l间的耦合。此外消息是否用压~要慎重考虑Q压~未必能减少消息大小。如果生产者、消费者和目的地ƈ|在同一WebLogic Server内部Q通常不用压~。WebLogicҎ的XMLMessage能ؓq行于消息主体之上的消息选择器提供内嵌式支持Q而且易于数据交换。因此,应用E序之间传送消息用XML消息格式Q而应用程序内部间传送消息用二q制消息格式?/FONT>

1.4.3 认方式的选择和JMS事务
  使用事务性会话时,量使用恰当的消息确认方?如果需求允?使用NO_ACKKNOWLEDGE;非持久的订阅者用DUPS_OK_ACKNOWLEDGE或者MULTICAST_NO_ACKNOWLEDGE。而用JTA的UserTransactionQ确认方式将被忽略。在使用JMS事务Ӟ无效的消息会D事务的回滚,以致消息重发q样的死循环。此Ӟ可以无效消息发送到错误消息队列Qƈ提交JMS事务Q这确保消息不会再ơ传递?/FONT>

1.5 EJB代码调优
1.5.1 有效使用设计模式
  GoF 的《设计模式》ؓ我们实现高性能、易扩展的J2EE应用提供理论保障和技术支持。而EJB作ؓJ2EE的核心组件和技术,善用设计模式对系l性能影响很大。Service Locator 和Value Object 已ؓ我们所熟悉QFloyd Marinescu的《EJB Design Patterns》中的Session Fa?ade、Message Fa?ade、EJB Command和Data Transfer Object{设计模式更是ؓ我们提供设计典范Q缓存对EJBHome的访问;使用门面模式Q不暴露Entity BeanQ用Session Bean装Entity BeanQ如果可以异步处理,则用MDB代替Session BeanQ封装业务逻辑在轻量JavaBean中;使用值对象等单对象传递数?不直接用get/setҎ操作Entity Bean。当然过度用模式或者牵强套用模式也是不提倡的Qȝ原则是减少|络量Q改q事务管理?/FONT>

1.5.2 使用EJB和WebLogic的特?/B>
  使用EJB和WebLogic的新Ҏ往往能提高性能。与EJB2.0Ҏ相关的技巧有Q一个Application中用本地接口,对于Entity Bean肯定使用本地接口Q避免远E调用的开销Q用CMP理关系Q而不是BMPQEJB2.0中CMP的性能大大改善Q性能和移植性都优于BMPQ用ejbSelectq行内部查询Q用homeҎq行外部查询和批处理; 数据库驱动联删除等?BR>
  与WebLogicҎ相关的技巧有:使用自动生成主键,WebLogic为Oracle和Sqlserver两种数据库的CMP提供了自动生成主键功?节约了Entity Bean产生主键的时?同时设key-cache-size不小?00;WebLogic理事务性能更好,使用容器理,而不是Bean理事务;WebLogic提供了ؓCMP动态查询和扚w插入功能,Ҏ能也有很大帮助?/FONT>

1.5.3 ~存资源
  对SLSB或者MDB来说,使用setMesssageDrivenContext()或者ejbCreate()Ҏ~存特定资源,在ejbRemove()Ҏ里释? 对SLSB或者MDB来说,使用setSessionContext()或者ejbCreate()Ҏ~存特定资源,在ejbRemove()Ҏ里释?对Entity Bean来说,使用setEntityContext ()Ҏ~存特定资源,在unSetEntityContext ()Ҏ里释放?BR>
1.5.4 如何选择和用Entity Bean
  1. 在设计EJBӞ要适当考虑EJB的粒? l粒度的EJB在事务管理和资源理的开销太大,量创徏_粒度的 EJB , 不要太粗Q粗到能满实际需求就可以;

  2. Entity Bean不是唯一方式,如果只有一个很的数据子集被经常改变,采用JDO;

  3. 在操作大数据量的时?直接采用JDBC比Entity Bean更有?

  4. 避免采用q回很大数据l的finderҎ,?FindAll() ҎQ因为它的实C价太?

  5. 考虑讄域组field groups,减少没有必要q昂늚属性加?如BLOB;

  6. 对于EJB1.1或者BMP,可以讄is-modified-method-name属?ҎisModified()的值来判断是否调用ejbStore(){方?减少没有必要q算;

  7. 避免q接多个表创建BMP,可以使用视图,存储q程或者O/R Mapping{方式?/FONT>

1.5.5 其他的一些小技?/B>
  1. 考虑使用 javax.ejb.SessionSynchronization 接口,提供在Rollback之后恢复数据的方? afterBegin(), beforeCompletion(), afterCompletion();
  2. 使用完SFSB之后Q调用remove()Ҏ释放实例;
  3. 假如你不需要EJB服务的时?使用普通Javac?
  4. 避免EJB之间怺调用;
  5. 使用多读模式?/FONT>

W二?应用服务器调?/FONT>(目录)
2.1 JVM调优
2.1.1 垃圾攉和堆大小

  垃圾攉(GC)是指JVM释放Java堆中不再使用的对象所占用的内存的q程,而Java?Heap)是指Java应用E序对象生存的空间。堆大小军_了GC的频度和旉。堆大,GC频度?速度慢。堆小,GC频度?速度快。所以GC和堆大小是一l矛盾。ؓ了获取理想的Heap堆大?需要?verbosegc参数(Sun jdk: -Xloggc:<file>)以打开详细的GC输出。分析GC的频度和旉,l合应用最大负载所需内存情况,得出堆的大小?BR>通常情况?我们使用可用内存(除操作系l和其他应用E序占用之外的内?70-80%,为避免堆大小调整引v的开销,讄内存堆的最值等于最大值即:-Xms=-Xmx。而ؓ了防止内存溢?在生产环境堆大小臛_?56M(Platform臛_512M),实际环境?12M~1G左右性能最?2G以上是不可取?在调整内存时可能需要调整核心参数进E的允许最大内存数。对于sun和hp的jvm,怹域太?默认4M)也可能造成内存溢出,应增加参-XX:MaxPermSize=128m。徏议设|时域-Xmn的大ؓ-Xmx?/4~1/3, SurvivorRatio??BR>
  Z获得更好的性能,在启动文件设|WebLogicZ品模?此时sun和hp jvm JIT引擎?server,默认情况下打开JIT~译模式Ҏ能也有帮助。调整Chunk Size和Chunk Pool Size也可能对pȝ的吞吐量有提高。此外还需关闭昄GC: -XX:+DisableExplicitGC?BR>
  当然在Intelq_上用jRockitQ用参?jrockitQ无疑大大提高WebLogic性能?BR>
2.1.2 jRockit调优
  jRockit支持四种垃圾攉器:分代复制攉器、单I间q发攉器、分代ƈ发收集器和ƈ行收集器。默认状态下QJRockit使用分代q发攉器。要改变攉器,可?Xgc:<gc-name>,对应四个攉器分其他为gencopy, singlecom, gencon以及parallel。ؓ得到更好的响应性能Q应该用ƈ发垃圑֛收器Q?Xgc:genconQ可使用-Xms?Xmx讄堆栈的初始大和最大?要设|护理域-Xns?Xmx?0%。而如果要得到更好的性能Q应该选用q行垃圾回收?-Xgc: parallelQ由于ƈ行垃圑֛收器不用nurseryQ不必设|?Xns?BR>
  如果你的U程大于100或者在linuxq_下,可以试使用瘦线E模式:-Xthinthread,同时关闭Native IO:-Xallocationtype:global?BR>
  jRockit q提供了强大的图形化监控工具Jrockit Management Console。欲详细了解JRockit可访问:
http://edocs.bea.com/wljrockit/docs81/index.html?/FONT>


2.2 Server调优
  WebLogic Server的核心组件由监听U程,套接字复用器和可执行U程的执行队列组成。当服务器由监听U程接收到连接请求后,对它的q接控制权交l等待接收请求的套接字复用器。然后套接字复用器读取离开套接字的h,q将此请求及相关安全信息或事务处理环境一L入适当的执行队列中(一般ؓ默认的执行队??当有一个请求出现在执行队列中时Q就会有一个空闲的执行U程从该队列中取走发来的?/FONT>hQƈq回应答Q然后等待下一ơ请求。因此要提高WebLogic的性能,必M调整核心lg性能出发?BR>
2.2.1 量使用本地I/O?/B>
WebLogic Server有两套套接字复用器:Java版和本地库。采用小型本地库更有?量ȀzEnable Native IO(默认),此时UNIX默认使用CPUs+1个线E?Window下ؓ双倍CPU。如果系l不能加载本地库,会抛出java.lang.UnsatisfiedLinkException,此时只能使用Java套接字复用器,可以调整socket readers 癑ֈ?默认?3%。该参数可以在Console Server Tuning Configuration配置栏里讄?/FONT>

2.2.2 调整默认执行U程?/B>
  理想的默认执行线E数是由多方面的因素军_?比如机器CPU性能、ȝ体系架构、I/O、操作系l的q程调度机制、JVM的线E调度机制。WebLogic生环境下默认的U程?5?随着CPU个数的增?WebLogic可以q乎U性地提高U程数。线E数多Q花费在U程切换的时间也p?U程数越?CPU可能无法得到充分利用。ؓ获取一个理想的U程?需要经q反复的试。在试?可以?5*CPUs为基准进行调整。当I闲U程较少,CPU利用率比较低?可以适当增加U程数的大小(每五个递增)。对于PC Server 和Window 2000Q则最好每个CPU于50个线E? 以CPU利用率ؓ90%左右Z。由于目前WebLogic执行U程没有~小U程数的功能,所以应参数Threads Increase讄?,同时不应改变优先U的大小?/FONT>

2.2.3 调整q接参数
  WebLogic Server用Accept Backlog参数规定服务器向操作pȝh的队列大,默认gؓ50。当pȝ重蝲负荷?q个值可能过?日志中报Connection Refused,D有效q接h遭到拒绝,此时可以提高Accept Backlog 25%直到q接拒绝错误消失。对于Portalcd的应?默认值往往是不够的。Login Timeout和SSL Login Timeout参数表示普通连接和SSLq接的超时时?如果客户q接被服务器中断或者SSL定w?可以试增加该倹{这些参数可以在Console Server Tuning Configration配置栏里扑ֈ?/FONT>

2.2.4 创徏新的执行队列
  创徏新的执行队列有助于解x心业务优先、避免交叉阻塞、死锁和长时间处理的业务{问题。通常会将自己的执行队列和默认的执行队列设|不同的优先U?q里优先U不应设?或?0?定义一个新的执行队列很Ҏ,利用View Excute Queue选项中的Configure a new Excute Queue链接卛_定制新的执行队列。创建新的执行队列后Q用户需要ؓ应用E序的J2EElg配置分配{略Q以便它可以扑ֈ新的队列。D个例子:要将servlet或jsp捆绑C个特定的执行队列Q必L换web.xml文g,wl-dispatch-policy初始化参数设|ؓ自己的执行队列名?BR>
<servlet>
<servlet-name>servletname</servlet-name>
<jsp-file>/directoryname/deployment.jsp</jsp-file>
<init-param>
<param-name>wl-dispatch-policy</param-name>
<param-value>NewExecuteQueueName</param-value>
</init-param>
</servlet>

  我们可以Z个jsp或者servlet乃至一个WEB应用讄自己的执行队列。同时也可以为EJB讄自己的执行队列。对于执行时间比较长的MDB,使用自己的执行队列?/FONT>

2.3 JDBC调优
2.3.1 调整q接池配|?/FONT>

  JDBC Connection Pool的调优受制于WebLogic ServerU程数的讄和数据库q程?游标的大。通常我们在一个线E中使用一个连?所以连接数q不是越多越?为避免两边的资源消耗,讄q接池的最大值等于或者略于U程数。同时ؓ了减新接的开销,最值和最大DZ致?BR>
  增加Statement Cache Size对于大量使用PreparedStatement对象的应用程序很有帮?WebLogic能够为每一个连接缓存这些对?此值默认ؓ10。在保证数据库游标大够的前提?可以Ҏ需要提高Statement Cache Size。比如当你设|连接数?5,Cache Size?0?数据库可能需要打开25*10=250个游标。不q的?当遇CPreparedStatement Cache有关的应用程序错误时,你需要将Cache Size讄??BR>
  管JDBC Connection Pool提供了很多高U参?在开发模式下比较有用,但大部分在生产环境下不需调整。这里徏议最好不要设|测试表, 同时Test Reserved Connections和Test Released Connections也无需勾上?当然如果你的数据库不E_,时断时箋,你就可能需要上q的参数打开?

  最后提一下驱动程序类型的选择,以OracleZ,Oracle提供thin驱动和oci驱动,从性能上来?oci驱动Zthin驱动,特别是大数据量的操作。但在简单的数据库操作中,性能相差不大,随着thin驱动的不断改q?q一弱势得到I补。而thin驱动的移植性明昑ּ于oci驱动。所以在通常情况下徏议用thin驱动。而最新驱动器׃WebLogic server/bin目录下的cd可能不是最新的,请以Oracle|站为准:
http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/htdocs/jdbc9201.html?/FONT>

2.4 WEB调优
2.4.1 调整WEB应用描述W?/FONT>

  WEB应用除代码之外的调优比较?仅仅是对一些WEB应用描述W的调整。首先关闭Session Monitoring Enabled,仅仅在Cluster环境下设|Session复制(优先使用内存复制),在保证应用正常运行的情况?讄较短的Session时旉?同时生环境下无需查Jsp和servletQJSPPage Check Secs和Servlet Reload Check Secs均设?1,关闭JSPKeep Generated 和JSPVerboseҎ能也有帮助。此外,q可以对jspq行预编?有两U方法:Ȁzprecompile选项Q用weblogic.appc事先~译Q徏议采用后者?/FONT>

2.5 JMS调优
  1. 增加-Dweblogic.JMSThreadPoolSize=n(臛_?),以提高处理JMS的线E数,在jRockit上增?XXenablefatspin以减加锁冲H?
  2. 采用文g存储{略,同步写{略讄为Direct-Write,同时在windowsq_上启用磁盘写入缓?
  3. 使用分布式目的地?Ȁz连接工厂Load Balancing Enabled ,Server Affinity Enabled;
  4. 为减服务器不必要的JMSh路由,如果多个目的C间存在事?则部|在同一JMS服务器上,量连接工厂部|到JMS服务器所在的WebLogic实例?集群环境下,则最好将q接工厂部v到集中的所有服务器?而集中每个JMS服务器和目的地成员尽量用类似的讄Q?BR>  5. 启用消息分页存储功能,以释攑ֆ?可以为JMS服务器和目的地设|? ȀzMessages Paging Enabled和Bytes Paging Enabled,同时使用限额防止服务器耗尽接收消息的所有可用内存空?
  6. 在运行WebLogic Serverq程之外的生产者务必用流控制, q增大Send Timeout;
  7. JMS Server Expiration Scan Interval讑־大的|能禁止主动扫描过期消?
  8. 使用FIFO或者LIFO方式处理目的地消?
  9. MDB的max-beans-in-free-pool不应大于最大MDBU程?默认U程?2+1)?


2.6 EJB调优
2.6.1 调整pool和cache

  initial-beans-in-free-pool定义SLSB启动时实例的个数,默认?,可以调大到正常ƈ发数的大?以减初始响应时间。max-beans-in-free-pool为最大个?默认1000对SLSB来说,在频J创建和删除实例的情况下很有帮助,一般不用调?臛_设ؓ默认U程?q大Ҏ造成内存溢出。而对Entity Bean来说,׃是匿名的,所以当频繁使用finder、home和createҎ时可以调大?BR>
  对SFSB来说,量max-beans-in-cache参数讄得够的大,以满Bean实例Ҏ大ƈ发用h的要求,可以避免有状态会话Beanq多的钝化行为。而idle-timeout-seconds量讄?如果SFSB不用于存储Web应用会话状态可以设|ؓ0?BR>
  对于Entity Bean来说, max-beans-in-cache同样可以首先采用默认?000Q监控实例缓存和钝化的情?再做适当调整?BR>
  q行{略concurrency-strategy定义了实体Bean如何理?有四U策? Exclusive、Databse、ReadOnly、Optimistic。效率依ơ提?可靠性依ơ降?量避免使用互斥{略,如果Bean无需更新操作,使用只读{略,更甚的是,如果Bean的内容不会改?可设|read-timeout-seconds?,乐观q行{略旉用事务间~存{略,在entity-cache描述W中cache-between-transactions元素设ؓtrue?/FONT>

2.6.2 优化事务隔离U别和事务属?/B>
  对EJBlg来说Q有四种事务隔离水^Q?/FONT>

  • TRANSACTION-SERIALIZABLEQ在处理完成之前拒绝其他处理的读入、可扩展性或插入数据操作;
  • TRANSACTION-REPEATABLE-READQ防止处理修Ҏ在被其他处理调用的数?
  • TRANSACTOIN-READ-COMMITTEDQ防止对正在被其他处理修改的数据执行写锁定;
  • TRANSACTION-READ-UNCOMMITTEDQ允许处理读入未受权的数据以及允许在向结果中d记录时可以忽略处理?

   以上隔离水^依次降低,效率和性能依次提高。因?选用满在业务数据完整性要求前提下水^最低的隔离U别?BR>
  对于事务属性的讄也是如此,对于删除、修改和插入操作讄为Required,而对于只L作设|ؓSupports或者NotSupports?/FONT>

2.6.3 其他一些小技?/B>
  1. 利用finders-load-bean的默认值trueQ既可以避免“n+1”的查询问题Q又可以提高pȝ的性能;
  2. 使用delay-updates-until-end-of-tx参数的默认值trueQ除非应用程序对某些变化有特别的要求;
  3. 应用E序在每个业务方法调用后不需要进行存在性检查,check-exists-on-method讑֮为falseQ以提高E序的性能;
  4. 同一应用? enable-call-by-reference讄?true;
  5. reentrant讄为false,避免事先加蝲子数据?/FONT>

W三?数据库调?/FONT>(目录)
3.1.1 Oracle性能优化

  Oracle9i的性能优化除了调整kernal之外是主要对Oracle启动文g的调?卌整SGA的参数。注?不同操作pȝ不同位数的机器最优的参数不是一L,q里主要有windows和unix之分,32位和64位之分?BR>首先需要调大进E数和游标数,一般默认的值对实际应用来说都比较小,比如?q程数可以调?00,游标数可以调?00?BR>
  其次,看一个经验公? OS 使用内存+ SGA + session*(sort_area_size + hash_area_size +2M)<0.7RAM,通常认ؓ此时的SGA比较合理。这里sort_area_size?4k, hash_area_size?28k(当排序多的时候需要增大sort_area_size,按调整后的D?,session表示最大ƈ发进E数,假设100个。假?G内存的机?OS占用200M,PGA占用200M左右,那么SGA可以设ؓ400-500MQ如?G内存可以1GlSGAQ?G可以5GlSGA。不q对?2位数据库来说Q通常最多只能?.7G内存?BR>
  然后QSGA内参数设|的基本原则是:data buffer 通常可以可能的大,shared_pool_size 要适度Qlog_buffer 通常大到几百K?M差不多。具体的Qdata buffer 1G内存可以讄500MQ?G设ؓ1.2GQ?G可设?G 。shared_pool_size不易q大Q通常应该控制?00M--300M,如果使用了大量的存储q程Q可以根据SGA的值增大到500MQ如果增大后命中率得不到提高Q则增加是无益的。具体的Q?G内存可以讄100MQ?G设ؓ150MQ?G可设?00M。如不用JavaQjava_pool_size 10-20M卛_。large_pool_size如果不设|MTSQ在20M -30M 卛_Q假如设|?MTS,可以考虑?session * (sort_area_size + 2M)?BR>
  最后,关于内存的设|可Ҏstatspack信息和v$system_event,v$sysstat,v$sesstat,v$latch {view信息来考虑微调?/FONT>

3.1.2 Oracle的其他调?/B>
  ZOracle高效率的q行Q除了上面提到的内存因素之外Q还有就是需要良好的数据库设计:表、视图、烦引和日志的合理规划和建立。I/O的性能也是重要因素Q应量减少交换和分配。此外,是改善查点的效率?/FONT>

W四?操作pȝ调优(目录)
4.1 操作pȝ调整

  操作pȝ影响应用E序q行性能的因素主要有Q硬件的配置(CPU、内存、硬盘等),核心参数,TCP/IP参数以及补丁的情늭。这里对操作pȝ的优?除了更新最新的补丁E序以保证应用程序正常运行之?是调整TCP/IP参数,文g描述W?对于个别操作pȝq有其他特别的参数调整。下面将依次介绍不同操作pȝ的情?更多的信息请参考各操作pȝ的文档?/FONT>

4.1.1 HP-UX
  对于HP-UX,你首先需要安装Java Patch:
http://www.hp.com/products1/unix/java/patches/index.html,然后需要确认下面文档中的核心参数是否满?可以使用sam命o修改核心参数):http://e-docs.bea.com/platform/suppconfigs/configs81/hpux11_risc/81sp3.html#80105?BR>
  调整TCP参数: ndd -set /dev/tcp tcp_conn_req_max 1024, 侦听队列的最大允讔R度调整到1024?有时操作pȝ限制q程使用的最大内存数于你要配置的内存大?则需要调整该倹{?BR>
  读者可以从
http://docs.hp.com/hpux/onlinedocs/TKP-90203/TKP-90203.html了解更多的HP-UX调整?/FONT>

4.1.2 Solaris
  调整TCP的参?{待旉间隔tcp-time-wait-interval讄?0000ms: /usr/sbin/ndd ?set /dev/tcp tcp_time_wait_interval 60000;
其他参数调整如下:

tcp_xmit_hiwat/tcp_recv_hiwat 131072
tcp_conn_req_max_q/tcp_conn_req_max_q0 16384

  调整一个进E打开的文件描q符的数?软限制和限制以及散列表的大?修改/etc/system文g:

set tcp:tcp_conn_hash_size=32768
set rlim_fd_cur=8192
set rlim_fd_max=8192

更多的调整信息请查阅:
http://docs.sun.com/db/doc/806-7009(Solaris9)?/FONT>

4.1.3 AIX
  AIX用no命o调整TCP参数Q等待时间间隔tcp_timewait: no -o tcp_timewait=4,tcp.timewait参数讄??5U间隔,?分钟。运行no -a命o显C网l当前的所有属性倹{由于UDP_SENDSPACE默认的缓存大是8k,为减I/O异常,需调整?2k:

  no -o udp_sendspace=32768。此? 当WebLogic HTTPh忙时,可以调整侦听队列的最大长somaxconn?192(默认值是1024)?BR>
  更多信息:
http://publib16.boulder.ibmo.com/pseries/en-us/aixbman/prftungd/prftungd.htm?/FONT>

4.1.4 Linux
  调整Linuxpȝ使用sysctl命o修改TCP参数{待旉间隔:sysctl -w ip_ct_tcp_timeout_time_wait=60;调整打开文g的最大数:?etc/sysctl.conf文g中,d: Fs.file-max=65535,然后q行sysctl -p;调整打开文g描述W最大数?192:?etc/security/limits.conf文gQ添?WebLogic hard nofile 8192(仅针对WebLogic用户),然后在WebLogic启动文g里运行ulimit-n 8192Ȁz设|?BR>
更多信息h?
http://ipsysctl-tutorial.frozentux.net/ipsysctl-tutorial.html?/FONT>

4.1.5 Windows
  Windowspȝ的调整通过修改注册表HKEY-LOCAL-MACHINESYSTEMCurrent ControlSetServices文gҎ完成。可以调整TcpipParameters子文件夹中的{待旉间隔旉TcpTimedWaitDelay参数的倹{侦听队列最大长度的默认gؓ15Qؓ修改它,可在InetinfoParameters子目录中创徏DWORD条目ListenBackLog?BR>此外,Windows2000的Service Pack(要求sp3以上)也会影响pȝE_?
http://e-docs.bea.com/platform/suppconfigs/configs81/win2ksvr_as_data_pentium/81sp3.html?/FONT>

W五?性能监控和性能分析(目录)
5.1 性能瓉
  最?介绍一下实际分析J2EE应用性能的常用命令和工具。对于实C个高性能的J2EE应用来说,掌握了J2EE调优的理论经验还是不够的。掌握性能监控,发现瓉和问题诊断才是保证J2EEpȝ持箋高效q行的关键?BR>瓉指的是限值所有吞吐操作以及严重媄响反应时间的pȝ内资源。在分布式系l内Lq纠正瓶颈是非常困难的,需要有l验的团队来解决。瓶颈会发生在Web服务器上Q程序代码中Q应用服务器上,数据库,操作pȝ或者网l,g上。经验表明,瓉很容易发生在如下地方Q数据库q接与队列中Q应用服务器的程序代码中Q应用服务器和Web服务器硬件上Q网l和TCP配置中。实际中可以着力对q些环节q行监控?BR>
5.2 操作pȝ监控
  操作pȝ层面的性能监控主要是对内存、CPU、I/O和交换区的用情况进行监控分析。windowsq_可以通过d理器和perfmon工具查看。如果是unixpȝ可以使用statpd命o(vmstat, mpstat, iostat)监控内存、CPU和I/O的即时变?使用swap命o查看交换区的使用情况。如果操作系l安装了top、topas、glance{用工?则用top、topas、glance能更ؓ方便地看到WebLogicq程Ҏ作系l的内存,CPU和I/O资源使用的即时变化情c?BR>
  而网l方面的性能可以通过ping和netstat{命令来监控,主要几个关键的网l统计?如数据包再发送、重复数据包和数据包侦听丢失?BR>
  说明:本文提到的unix命oq适用所有操作系l?仅供参考?/FONT>

5.3 数据库监?/B>
  数据库层面的监控q里为oracle9iZ来说?可以采用oracle自带的工具Oracle
Interprise Manager Console来监控session和sql的执行情c还有其他专业的数据库监控工具可以?比如QUEST的spotlight(
http://www.quest.com/spotlight-portal/)可以非常形象和直观地对Oracle数据库的CPU、内存、I/O、Data Buffer Size、Shared Pool Size、Redo Buffer{参数进行即时监?q自动对不正常的参数以红色显C?/FONT>

5.4 WebLogic监控
5.4.1 JVM监控

  采用java参数-verbose:gc 来分析JVM的GC非常J琐Q而且不直观。?Xloggc:gc.log 参数GC日志写入文g,采用GC 工具HPjtune (http://www.javaperformancetuning.com/tools/hpjtune/index.shtml)q行分析,可以L看出当前jvm参数配置是否合理?BR>
  严格意义上来说HPjtune是一个分析工?不是监控工具。这里不得不提及jRocket,Intelq_上最快的JVM, 在WebLogic启动命o中增?Xmanagement参数,可以执行beajrockit81sp3_142_04in下console命o监控WebLogic的内存用和CPU负蝲情况。设|Tools/Preferences菜单中的Mode of operation属性ؓdeveloper, jRocket提供Method Profiler工具Q她能够所有在JRockit Java虚拟Z执行的成员方法的调用ơ数、执行的L间和每次调用的执行时间都l计出来Q进行代码调优Q这是jRockit的又一大优ѝ?/FONT>


5.4.2 Console监控
  WebLogic Console除了理配置功能之外,提供了丰富的监控功能。通过WebLogic ConsoleQ首先我们可以查看服务器的运行情c?/FONT>

5.4.2.1 Server监控
  通过使用服务器的Performance Monitoring选项卡,可以查看到请求吞吐量Q执行队列积压情况以及JVM栈利用情c而通过点击Performance Genaral选项卡中?Monitor all Active Queues...”可以查看所以执行线E的当前l计数据。此外Monitoring选项卡还可以监控JTA和JMS{Service的情c?/FONT>


5.4.2.2 JDBC监控
  在连接池Monitoring选项卡中QWebLogic Console为每一个数据库q接池提供了实时l计信息。其中有三个重要参数可以反应WebLogic Server的健L况:Connections High、Wait Second High和Waiters High。Connection High表示从服务器启动开始后到达池的最大连接数量,如果大于池的最大数量,则需要调整Maxium Capacity。Waiters High表示在没有可用连接的情况下,应用E序{待q接的最大个数。我们可以根据Waiters High的大调整连接池定w。更多的参数可以通过Customize this view链接d,参数含义参?
http://e-docs.bea.com/wls/docs81/ConsoleHelp/domain_jdbcconnectionpool_monitor.html#1104829?/FONT>

5.4.2.3 WEB监控
  Web Application Monitoring选项卡可以监控WEB应用的Session个数,以及Servlet的响应情?ȀzSession Monitoring Enabled可以获取所有session的统计情c更多信息请参?
http://e-docs.bea.com/wls/docs81/ConsoleHelp/web_applications.html#1106723?/FONT>

5.4.2.4 JMS监控
  Welogic Console JMS监控功能比较?不仅在Server JMS Monitoring选项卡可以监控Active JMS Connections, Pooled JMS Connections和Active JMS Servers的连接和使用情况。还可以监控JMS Session Pool、Active JMS Destinations和Durable Subscribers的消费和生情况。比?我们可以监控到JMS Queue的接收和消费消息的数量和字节数。有关JMS监控的详l情况可参见:
http://edocs.bea.com/wls/docs81/ConsoleHelp/jms_monitor.html?BR>
5.4.2.5 EJB监控
  EJB监控包括对SLSB,SFSB,Entity Bean,MDB四种EJB的监控。本为EJB监控提供了非怸富的q行时统计信?
http://e-docs.bea.com/wls/docs81/ConsoleHelp/ejb.html#1105036),非常有利于我们对EJBq行性能调优?BR>
  SLSB选项卡ؓ用户提供实例池的q行时统计信息。Pool Miss Ratio 表示实例池的Miss?Pool Waiter Total Count 表示U程{待bean 实例的篏计时?Pool Timeout Total Count表示时的线E数。当Pool Miss Ratio较大?可以增加max-beans-free-pool?BR>
  SFSB可以xCache Miss Ratio和Activation Count。Cache Miss Ratioq大?调大max-bean-in-cache未必有帮?需要尝试不用的max-bean-in-cache以获得最低的Cache Miss Ratio。激zd严重减慢应用E序的速度,如果某一个bean的Activation Count的D高,那么需要考虑增加max-bean-in-cache的大?BR>Entity Beanl合了SLSB的free pool和SFSB的cache。可以结合上面的{略q行监控?

  而MDB仅比SLSB多一个参数JMSConnection Alive,报告EJB是否成功q接到JMS目的地?BR>
更多Console监控信息可参?/FONT>http://edocs.bea.com/wls/docs81/ConsoleHelp/index.html?/FONT>

5.4.3 实用工具分析
  WebLogic除了提供Consoleq行应用监控之外,用户q可以编写JMXE序或者通过SNMP协议q行监控。而QUEST Spotlight for WebLogic Server提供了类似WebLogic ConsolecM的监控功?q对异常情况昄?BR>q里不得不提到实战中l常用来分析性能瓉的工具THREAD DUMP,l一的命令是使用 weblogic.Admin 命o THREAD_DUMP。而在 windows上还可以使用<Ctrl>+<Break> 来创断问题所需的线E{储Thread Dump,而在unix上用kill -3 <wlspid>命o。我们从中可以看到WebLogic后台U程的运行情?通常需要每?0U左xl执行几ơ以助诊断问题。更多信息可以参考BEA实战集锦?/FONT>

5.5 应用E序分析
  应用E序分析除了凭借程序员丰富的经验和敏锐的洞察力Mh工检查代码之?使用厂家的工具也是节省时间的不错选择。目前市Z有Borland Optimizeit Enterprise Suite和QUEST Jprobe两个产品可以用来分析性能瓉,垃圾攉,内存泄漏,U程死锁和代码复盖等。Hpjmeter是一个免费的工具,也具有以上类似的性能分析功能?BR>
  而Borland Optimizeit Server Trace,HP OpenView Transaction Analyzer和Mercury LoadRunner J2EE breakdown都可以用来分解J2EE应用从客L讉K到最l数据库操作每一层次p的时?甚至_到每一个方法的执行旉。Server Traceq具有检查内存泄漏,q接泄漏和错误警告等功能,一般在试环境中用。而HP OTVA的优势在于运行时监控,LoadRunner优势在于压力试?/FONT>

ȝ(目录)
  J2EE调优是一门实践和l验U学Q是一个复杂而往复的q程。其原则是:合理。合?看似?l细品味,意味深长。本文所q的调优{略q不是一成不变的Q只是ؓ了给大家一个参考徏议,让大家少走弯路,关键是根据实际环境调优。欢q有兴趣的朋友在论坛上积极讨论和批评指正?/FONT>



]]>
վ֩ģ壺 ɽ| | | ʡ| | | | | | Ʊ| | | | ƽ| ʯ| | | | | | | Ϫ| | ˷| | ̫ԭ| ʡ| ɽ| | ͨ| | ²| | | ľ| ֿ| ۩| ƺ| ƽ| ̫| ͡|