﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-xiaomage234-文章分类-Performance Tuning</title><link>http://www.blogjava.net/xiaomage234/category/1690.html</link><description>行到水穷处,坐看云起时，才发现：其实人生最重要的是找到一些吃的东西；找到一些喝的东西；找到一些可以一起欢笑一起流泪的朋友和一个懂你的人！</description><language>zh-cn</language><lastBuildDate>Fri, 02 Mar 2007 07:36:43 GMT</lastBuildDate><pubDate>Fri, 02 Mar 2007 07:36:43 GMT</pubDate><ttl>60</ttl><item><title>weblogic培训笔记（三）java虚拟机配置</title><link>http://www.blogjava.net/xiaomage234/articles/6338.html</link><dc:creator>小马歌</dc:creator><author>小马歌</author><pubDate>Sat, 18 Jun 2005 07:03:00 GMT</pubDate><guid>http://www.blogjava.net/xiaomage234/articles/6338.html</guid><wfw:comment>http://www.blogjava.net/xiaomage234/comments/6338.html</wfw:comment><comments>http://www.blogjava.net/xiaomage234/articles/6338.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaomage234/comments/commentRss/6338.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaomage234/services/trackbacks/6338.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: u&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JRockit是BEA公司开发的Intel平台之上的高性能以及高可管理性的jvm产品，在Intel平台上使用JRockit无疑会大大的提高效率。使用向导建立server的配置的时候，可以选择JRockit作为该server的虚拟机，另外，也可以在域的startWebLogic.cmd或者startWebLogic.sh脚本...&nbsp;&nbsp;<a href='http://www.blogjava.net/xiaomage234/articles/6338.html'>阅读全文</a><img src ="http://www.blogjava.net/xiaomage234/aggbug/6338.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaomage234/" target="_blank">小马歌</a> 2005-06-18 15:03 <a href="http://www.blogjava.net/xiaomage234/articles/6338.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>weblogic培训笔记（二）web应用程序的相关配置</title><link>http://www.blogjava.net/xiaomage234/articles/6337.html</link><dc:creator>小马歌</dc:creator><author>小马歌</author><pubDate>Sat, 18 Jun 2005 06:59:00 GMT</pubDate><guid>http://www.blogjava.net/xiaomage234/articles/6337.html</guid><wfw:comment>http://www.blogjava.net/xiaomage234/comments/6337.html</wfw:comment><comments>http://www.blogjava.net/xiaomage234/articles/6337.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaomage234/comments/commentRss/6337.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/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">单线程模式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实例将会产生多个线程来同时响应多个请求。<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旗标接口，那么这个servlet将会自动拒绝多路并行请求的模式。在这种情况下，weblogic会产生一个servlet实例池来满足单线程的要求。<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，如果需要在大容量的系统中使用单线程模式的servlet，那么应该调整如下的参数：<o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 57.75pt"><FONT size=4><SPAN 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 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.xml</SPAN></SPAN><SPAN 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 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>webapplication</SPAN></SPAN><SPAN 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 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 class=subtab-selected><SPAN lang=EN-US>Descriptor</SPAN></SPAN><SPAN lang=EN-US>&nbsp;&nbsp;</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>的更改情况，在产品模式下，不需要这些检查，可以通过下面的参数更改：<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>这两项是<SPAN lang=EN-US>weblogic</SPAN>检查<SPAN lang=EN-US>jsp</SPAN>和<SPAN lang=EN-US>servlet</SPAN>的时间间隔。设置为<SPAN lang=EN-US>-1</SPAN>，<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 class=dialog-label><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US>JSPKeep Generated</SPAN></SPAN></FONT></B></SPAN><SPAN 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 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 42pt; TEXT-INDENT: 15.75pt"><SPAN 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 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 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>IDE</SPAN></SPAN><SPAN 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 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 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>注意：在产品发布模式下，请禁止对servlet和jsp的变更检查，这样除了能提高效率以外，还可以防止用上传文件的方式对服务器的攻击。如果需要更改servlet和jsp，可以重新部署应用。<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">：如果不设置过期时间，则表示这个</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">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"> 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">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 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 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 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 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 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 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 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 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 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 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 class=dialog-label><SPAN lang=EN-US>Jdbc</SPAN></SPAN><SPAN 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 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 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 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 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>jdbc</SPAN></SPAN><SPAN 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 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 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>user=examples<o:p></o:p></SPAN></SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 57.75pt"><SPAN 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 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 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 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"><SPAN 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 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 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 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 class=dialog-label><SPAN lang=EN-US><o:p><FONT size=4>&nbsp;</FONT></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 57.75pt"><SPAN 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 class=dialog-label><SPAN style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">：</SPAN></SPAN><SPAN class=dialog-help><SPAN lang=EN-US>prepared statements</SPAN></SPAN><SPAN 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 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 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><o:p></o:p></SPAN></SPAN></FONT></P><SPAN 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">：缓存中语句的最大数量，调整这个数值的大小，有利于提高系统的效率。</SPAN></FONT><img src ="http://www.blogjava.net/xiaomage234/aggbug/6337.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaomage234/" target="_blank">小马歌</a> 2005-06-18 14:59 <a href="http://www.blogjava.net/xiaomage234/articles/6337.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>weblogic培训笔记（一）weblogic Server内部结构和相关的配置</title><link>http://www.blogjava.net/xiaomage234/articles/6336.html</link><dc:creator>小马歌</dc:creator><author>小马歌</author><pubDate>Sat, 18 Jun 2005 06:57:00 GMT</pubDate><guid>http://www.blogjava.net/xiaomage234/articles/6336.html</guid><wfw:comment>http://www.blogjava.net/xiaomage234/comments/6336.html</wfw:comment><comments>http://www.blogjava.net/xiaomage234/articles/6336.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaomage234/comments/commentRss/6336.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaomage234/services/trackbacks/6336.html</trackback:ping><description><![CDATA[<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt; mso-list: l1 level1 lfo1; tab-stops: list 42.0pt"><FONT size=4><SPAN style="mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: ZH-CN"><SPAN style="mso-list: Ignore">weblogic Server内部结构图：<BR><BR><IMG height=271 alt=r_3333.jpg src="http://www.blogjava.net/images/blogjava_net/lqsun/1699/r_3333.jpg" width=623 border=0><BR>(一)<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp; </SPAN></SPAN></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"><?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 42pt"><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">服务器启动，就会绑定到相应的端口，并为一个端口分配一个线程以接受连接请求，一旦服务器接受到连接请求并建立好连接以后，监听线程将处理权交给套接字复用器，套接字复用器进行一定的处理，并会负责选择利用那个执行队列并将请求置入其中。当有一个请求进入执行队列，就会有一个空闲的执行县城从该队列里面取走并向调用者返回结果。</SPAN><SPAN style="mso-ansi-language: ZH-CN"><o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt; mso-list: l1 level1 lfo1; tab-stops: list 42.0pt"><FONT size=4><SPAN style="mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: ZH-CN"><SPAN style="mso-list: Ignore">(二)<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp; </SPAN></SPAN></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 42pt"><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">执行线程数量有一定的限制，在服务器启动的时候，就已经形成了一个含有一定数量执行线程的池，执行线程可能跨</SPAN><SPAN style="mso-ansi-language: ZH-CN">servlet</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">ejb</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">jdbc</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 42pt"><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">相关的配置信息有：</SPAN><SPAN style="mso-ansi-language: ZH-CN"><o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 42pt"><FONT size=4><SPAN style="mso-ansi-language: ZH-CN">server</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 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 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 style="mso-ansi-language: ZH-CN">Config Execute Queues</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; TEXT-INDENT: -15.75pt; mso-list: l2 level1 lfo2; 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">1、</SPAN></SPAN><B style="mso-bidi-font-weight: normal"><SPAN style="mso-ansi-language: ZH-CN">Queue Length</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">队列长度，执行队列的长度</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; TEXT-INDENT: -15.75pt; mso-list: l2 level1 lfo2; 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">2、</SPAN></SPAN><B style="mso-bidi-font-weight: normal"><SPAN style="mso-ansi-language: ZH-CN">Queue Length Threshold Percent </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">一个百分数，当</SPAN><SPAN style="mso-ansi-language: ZH-CN">request</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">weblogic</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">overflow</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; TEXT-INDENT: -15.75pt; mso-list: l2 level1 lfo2; 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><B style="mso-bidi-font-weight: normal"><SPAN style="mso-ansi-language: ZH-CN">Thread Count </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">服务器初始创建的执行线程的数量</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; TEXT-INDENT: -15.75pt; mso-list: l2 level1 lfo2; 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">4、</SPAN></SPAN><B style="mso-bidi-font-weight: normal"><SPAN style="mso-ansi-language: ZH-CN">Thread Increase</SPAN></B><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 style="mso-ansi-language: ZH-CN">weblogic</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">overflow</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">weblogic</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; TEXT-INDENT: -15.75pt; mso-list: l2 level1 lfo2; tab-stops: list 57.75pt"><FONT size=4><SPAN class=dialog-label><SPAN style="mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: ZH-CN"><SPAN style="mso-list: Ignore">5、</SPAN></SPAN></SPAN><SPAN class=dialog-label><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US>Threads Maximum</SPAN></B></SPAN><SPAN class=dialog-label><SPAN style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">最大执行线程数</SPAN></SPAN><SPAN class=dialog-label><SPAN style="mso-ansi-language: ZH-CN"><o:p></o:p></SPAN></SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 57.75pt; TEXT-INDENT: -15.75pt; mso-list: l2 level1 lfo2; tab-stops: list 57.75pt"><FONT size=4><SPAN class=dialog-label><SPAN style="mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: ZH-CN"><SPAN style="mso-list: Ignore">6、</SPAN></SPAN></SPAN><SPAN class=dialog-label><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US>Threads Minimum</SPAN></B></SPAN><SPAN class=dialog-label><SPAN style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">最小执行线程数</SPAN></SPAN><SPAN class=dialog-label><SPAN style="mso-ansi-language: ZH-CN"><o:p></o:p></SPAN></SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 57.75pt; TEXT-INDENT: -15.75pt; mso-list: l2 level1 lfo2; tab-stops: list 57.75pt"><FONT size=4><SPAN class=dialog-label><SPAN style="mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: ZH-CN"><SPAN style="mso-list: Ignore">7、</SPAN></SPAN></SPAN><SPAN class=dialog-label><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US>Thread Priority</SPAN></B></SPAN><SPAN class=dialog-label><SPAN style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">线程优先级</SPAN></SPAN><SPAN class=dialog-label><SPAN style="mso-ansi-language: ZH-CN"><o:p></o:p></SPAN></SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 42pt"><FONT size=4><SPAN 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">server</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 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 style="mso-ansi-language: ZH-CN">tuning</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 60pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo3; tab-stops: list 60.0pt"><FONT size=4><SPAN class=dialog-label><SPAN lang=EN-US style="mso-fareast-font-family: 'Times New Roman'"><SPAN style="mso-list: Ignore">1、<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp; </SPAN></SPAN></SPAN></SPAN><SPAN class=dialog-label><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US>Stuck Thread Max Time</SPAN></B><SPAN lang=EN-US> </SPAN></SPAN><SPAN 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 60pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo3; tab-stops: list 60.0pt"><FONT size=4><SPAN class=dialog-label><SPAN lang=EN-US style="mso-fareast-font-family: 'Times New Roman'"><SPAN style="mso-list: Ignore">2、<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp; </SPAN></SPAN></SPAN></SPAN><SPAN class=dialog-label><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US>Stuck Thread Timer Interval</SPAN></B><SPAN lang=EN-US> </SPAN></SPAN><SPAN 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 42pt"><FONT size=4><SPAN 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 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 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 42pt"><FONT size=4><SPAN class=dialog-label><SPAN style="COLOR: red; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">注意：执行线程的数量一旦增加，目前</SPAN><SPAN lang=EN-US style="COLOR: red">weblogic</SPAN></SPAN><SPAN class=dialog-label><SPAN style="COLOR: red; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">不会去减少他，如果增加了一些线程以后再次出现</SPAN><SPAN lang=EN-US style="COLOR: red">overflow</SPAN></SPAN><SPAN class=dialog-label><SPAN style="COLOR: red; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">的警告，</SPAN><SPAN lang=EN-US style="COLOR: red">weblogic</SPAN></SPAN><SPAN class=dialog-label><SPAN style="COLOR: red; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">会继续增加执行线程的数量，一直到达到上限为止。</SPAN></SPAN><SPAN lang=EN-US style="COLOR: red"><o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt; mso-list: l1 level1 lfo1; tab-stops: list 42.0pt"><FONT size=4><SPAN style="mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: ZH-CN"><SPAN style="mso-list: Ignore">(三)<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp; </SPAN></SPAN></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 42pt"><FONT size=4><SPAN style="mso-ansi-language: ZH-CN">Weblogic</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">java</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">jni</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">java</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">jni</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">jni</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">API</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">jni</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 style="COLOR: red">所以尽量保证</SPAN></SPAN><SPAN style="COLOR: red; mso-ansi-language: ZH-CN">weblogic</SPAN><SPAN style="COLOR: red; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; 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 style="mso-ansi-language: ZH-CN"><o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 42pt"><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">相关的配置参数有两个，在</SPAN><SPAN style="mso-ansi-language: ZH-CN">server</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 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 style="mso-ansi-language: ZH-CN">tuning</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 42pt"><FONT size=4><SPAN class=dialog-label><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US>Enable Native IO</SPAN></B><SPAN lang=EN-US> </SPAN></SPAN><SPAN 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>IO</SPAN></SPAN><SPAN 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 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 42pt"><FONT size=4><SPAN class=dialog-label><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US>Socket Readers</SPAN></B><SPAN lang=EN-US> </SPAN></SPAN><SPAN 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 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 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>socket</SPAN></SPAN><SPAN class=dialog-label><SPAN style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">的请求。</SPAN></SPAN></FONT></P><img src ="http://www.blogjava.net/xiaomage234/aggbug/6336.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaomage234/" target="_blank">小马歌</a> 2005-06-18 14:57 <a href="http://www.blogjava.net/xiaomage234/articles/6336.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DB2常用命令介绍</title><link>http://www.blogjava.net/xiaomage234/articles/6016.html</link><dc:creator>小马歌</dc:creator><author>小马歌</author><pubDate>Mon, 13 Jun 2005 00:44:00 GMT</pubDate><guid>http://www.blogjava.net/xiaomage234/articles/6016.html</guid><wfw:comment>http://www.blogjava.net/xiaomage234/comments/6016.html</wfw:comment><comments>http://www.blogjava.net/xiaomage234/articles/6016.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaomage234/comments/commentRss/6016.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaomage234/services/trackbacks/6016.html</trackback:ping><description><![CDATA[<FONT face=宋体><FONT size=4>1．&nbsp;启动数据库<BR>&nbsp;&nbsp;&nbsp; db2start<BR>2．&nbsp;停止数据库<BR>&nbsp;&nbsp;&nbsp; db2stop<BR>3．&nbsp;连接数据库<BR>&nbsp;&nbsp;&nbsp; db2 connect to databasename user db2 using pwd<BR>4．&nbsp;获得数据库管理程序配置<BR>&nbsp;&nbsp;&nbsp; db2 get dbm cfg<BR>5．&nbsp;更改数据库管理程序配置<BR>&nbsp;&nbsp;&nbsp; db2 update dbm cfg using 参数名 参数值<BR>6．&nbsp;获得数据库的配置<BR>&nbsp;&nbsp;&nbsp; db2 connect to databasename user db2 using pwd<BR>&nbsp;&nbsp;&nbsp; db2 get db cfg for databasename <BR>7．&nbsp;更改数据库的配置<BR>&nbsp;&nbsp;&nbsp; db2 connect to databasename user db2 using pwd<BR>&nbsp;&nbsp;&nbsp; db2 update db cfg for databasename using 参数名 参数值<BR>8．&nbsp;关闭所有应用连接<BR>&nbsp;&nbsp;&nbsp; db2 force application all<BR>&nbsp;&nbsp;&nbsp; db2 force application ID1,ID2,,,Idn MODE ASYNC<BR>&nbsp;&nbsp;&nbsp; (db2 list application for db databasename show detail)<BR>9．&nbsp;备份数据库<BR>&nbsp;&nbsp;&nbsp; db2 force application all<BR>&nbsp;&nbsp;&nbsp; db2 backup db databasename to d:<BR>&nbsp;&nbsp; (db2 initialize tape on </FONT><A href="file://\\.\tape0"><FONT size=4>\\.\tape0</FONT></A><FONT size=4>)<BR>&nbsp;&nbsp; (db2 rewind tape on </FONT><A href="file://\\.\tape0"><FONT size=4>\\.\tape0</FONT></A><FONT size=4>)<BR>&nbsp;&nbsp; db2 backup db databasename to </FONT><A href="file://\\.\tape0"><FONT size=4>\\.\tape0</FONT></A><BR><FONT size=4>10．&nbsp;恢复数据库<BR>&nbsp;&nbsp; db2 restore db databasename from d: to d: <BR>&nbsp;&nbsp; db2 restore db databasename from </FONT><A href="file://\\.\tape0"><FONT size=4>\\.\tape0</FONT></A><FONT size=4> to d:<BR>11．&nbsp;绑定存储过程<BR>&nbsp; db2 connect to databasename user db2 using pwd<BR>&nbsp; db2 bind c:\dfplus.bnd<BR>&nbsp;拷贝存储过程到服务器上的C:\sqllib\function目录中<BR>12．&nbsp;重组表<BR>&nbsp;&nbsp; db2 connect to databasename user db2 using pwd<BR>&nbsp;&nbsp; db2 reorg table ydd<BR>&nbsp;&nbsp; db2 runstats on table ydd with distribution and indexes all<BR>13．&nbsp;导出表数据<BR>&nbsp;&nbsp;&nbsp; db2 export to c:\dftz.txt of del select * from dftz<BR>&nbsp;&nbsp;&nbsp; db2 export to c:\dftz.ixf of ixf select * from dftz<BR>14．&nbsp;导入表数据<BR>import from c:\123.txt of del&nbsp; insert into ylbx.czyxx<BR>db2 import to c:\dftz.txt of del commitcount 5000 messages&nbsp; c:\dftz.msg insert into dftz<BR>db2 import to c:\dftz.ixf of ixf commitcount 5000 messages c:\dftz.msg insert into dftz<BR>db2 import to c:\dftz.ixf of ixf commitcount 5000 insert into dftz<BR>db2 import to c:\dftz.ixf of ixf commitcount 5000 insert_update into dftz<BR>db2 import to c:\dftz.ixf of ixf commitcount 5000 replace into dftz<BR>db2 import to c:\dftz.ixf of ixf commitcount 5000 create into dftz&nbsp;&nbsp; (仅IXF)<BR>db2 import to c:\dftz.ixf of ixf commitcount 5000 replace_create into dftz&nbsp; (仅IXF)<BR>15．&nbsp;执行一个批处理文件<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; db2 -tf 批处理文件名<BR>&nbsp;&nbsp;&nbsp;&nbsp; （默认文件中每一条命令用 ；结束）<BR>16．&nbsp;自动生成批处理文件<BR>&nbsp;&nbsp;&nbsp; 建文本文件：temp.sql，内容如下：<BR>&nbsp; select 'runstats on table DB2.' || tabname || ' with distribution and&nbsp; detailed indexes all;' from syscat.tables where tabschema='DB2' and type='T';<BR>db2 -tf temp.sql&gt;runstats.sql<BR>17．&nbsp;自动生成建表（视图）语句<BR>在服务器上：C:\sqllib\misc目录中<BR>db2 connect to databasename user db2 using pwd<BR>db2look -d databasename -u db2 -e -p -c c:\databasename .txt<BR>18．&nbsp;授权命令<BR>grant dbadm on database to user bb<BR>19．&nbsp;列出所有的系统表 <BR>list tables for system<BR>20.&nbsp;&nbsp;查看表结构 <BR>db2 describe select * from user.tables<BR>&nbsp;db2 describe table user.tables<BR>21.&nbsp;Catalog：编目数据库或节点<BR>db2 catalog tcpip node nodename remote ip server port<BR>db2 catalog db dbname as dbalias at node nodename<BR>22.&nbsp;Uncatalog：功能与上相反，删除已经编目的数据库或节点<BR>注：执行完catalog或者uncatalog后，需要执行terminate，实现刷新目录列表的作用。Terminate的功能是终止clp的后台进程，在此clp下的连接将全部断开，同时本连接下做的数据库更改做一个内部提交。<BR>23.&nbsp;Attach：<BR>建立一个到数据库实例的连接，执行实例级别的命令，比如create database，force applications等，需要实例级的用户权限。<BR>24.&nbsp;List：<BR>显示一些数据库对象或者设置的相关信息<BR>25.&nbsp;Load：导入数据<BR>注意自动生成列数据导入问题：需要加MODIFIED BY&nbsp; GENERATEDMISSING（可空下保持空）,&nbsp; GENERATEDIGNORE（非空将添入默认，可空将保持空状态）, GENERATEDOVERRIDELOAD（非空下导入原来表中的值，比较有用）<BR></FONT></FONT>
<P><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><FONT size=4></FONT></SPAN>&nbsp;</P><img src ="http://www.blogjava.net/xiaomage234/aggbug/6016.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaomage234/" target="_blank">小马歌</a> 2005-06-13 08:44 <a href="http://www.blogjava.net/xiaomage234/articles/6016.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(转)让LoadRunner走下神坛</title><link>http://www.blogjava.net/xiaomage234/articles/5750.html</link><dc:creator>小马歌</dc:creator><author>小马歌</author><pubDate>Wed, 08 Jun 2005 09:09:00 GMT</pubDate><guid>http://www.blogjava.net/xiaomage234/articles/5750.html</guid><wfw:comment>http://www.blogjava.net/xiaomage234/comments/5750.html</wfw:comment><comments>http://www.blogjava.net/xiaomage234/articles/5750.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaomage234/comments/commentRss/5750.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaomage234/services/trackbacks/5750.html</trackback:ping><description><![CDATA[<P>
<TABLE height=56 width="100%" border=0>
<TBODY>
<TR>
<TD vAlign=top align=right height=15>
<DIV align=center><FONT size=4>来自www.51testing.com论坛 原创作者： sunshinelius （LoadRunner版版主） </FONT></DIV></TD></TR>
<TR>
<TD vAlign=top align=left height=17>
<P align=left><FONT size=4>Loadrunner无疑是一个强大有力的压力测试工具。它的脚本可以录制生成，自动关联；测试场景可以面向指标，多方监控；测试结果图表显示，拆分组合。相信有人这样想象过：拿着一张性能指标标准列表和测试数据相比较，如同PH试纸一样，遇碱则蓝，遇酸则红，一目了然，之后就可以大声地喊道：我找到了软件系统的性能瓶颈！ <BR>然而，我们无论在loadrunner前面加多少个“强大”、“智能”的形容词，别忘了其最终修饰的只是一个名词－“工具”。《大话西游》中也有相当精辟的论断：官兵？最多也只是个长了痔疮的官兵！把loadrunner比喻成长了痔疮的官兵有点粗俗，但loadrunner它是个工具，那么是否能够找到性能瓶颈就取决于使用工具的人，而不是工具本身。要做一个成功的性能测试，仅读懂和精通了loadrunner的使用手册是不够的，还需要对被测软件系统的方方面面都要有了解，比如软件体系构架，网络拓扑等知识。这就如同一个技艺高超的木匠，并不是因为他背熟了凿子，锤子的说明书，而是他能结合木材的质地和尺寸，用凿子和锤子这些工具做出一把精巧的椅子来。那么在性能测试中，人的智慧活动体现在哪里呢？ </FONT></P>
<P align=left><BR><FONT size=4>一．首先性能测试也是测试的一种，这就意味着做性能测试也要写测试案例。你所作的性能测试能不能足以支持找出性能测试瓶颈，和你在初期设计的测试案例关系甚为重要。我曾写过对一个软件系统的不下十个性能测试场景案例，等后来运行时却发现我必须增补几个案例才能找到瓶颈，而原来十多个案例其实重复甚多。如果你要写出好的不重复的性能测试案例来，你就得对被测软件系统有一定的了解。 <BR>在这里，我顺便插一句，在目前测试界总在争论测试人员需不需要懂编程，需不需要有开发经验这种问题，这完全是本末倒置，忘记了测试人员的目标是什么，测试目标就是写出好的测试案例，好的测试案例就是发现了一个原来未曾发现的软件bug。那么一个测试人员知识体系是否够用的标准就是能不能写出一个好的测试案例。而针对不同类型的测试，所需的知识深度是不一样的，有的是不需编程知识，比如界面测试；有的是必须有开发经验的，比如接口测试，不能一概而论。 <BR>对于性能测试来讲，我个人认为，测试人员倒不一定非要有开发经验，但是应该有一个对软件体系结构了解全面的知识。为什么呢？做性能测试时，如果从客户端施压一次就符合性能指标，碰到这种情况您就偷着乐吧，因为在你的指标场景下，软件系统中就不存在性能瓶颈，您也就不用费心去找了。但是大多数情况下，我们在做性能测试时，都不能顺利达到性能指标，可能server响应超时了，也可能是用户死掉了，在日志里抛出了一堆error，这种情形是非常常见，所以在我们在一开始设计性能测试方案时，就应该考虑为寻找性能瓶颈而设计测试案例。这时我们就需要知道在整个软件系统中，有哪些节点，在哪些地方可能存在瓶颈，比如一个B/S系统就有IE client→物理网络→web server→app server→DB这样的一个压力流串。每个节点的每个模块都有可能成为瓶颈。瓶颈的产生可能由于模块配置引起，也可能由于模块本身引起。这都需要我们设计测试案例来发现的。一般地，我自己常用的感觉也比较方便的方法是，设计一组性能测试案例来验证一个节点是否存在瓶颈，这组case中尽量保持其他节点不变，来改变这个节点的配置，并监控此节点的各种指标。这里说起来就有很多话了，不是一言两语能说得清的。以后有时间可以找个专题来慢慢跟大家讨论。 </FONT></P>
<P align=left><BR><FONT size=4>二．使用loadrunner的VU生成脚本。脚本的生成方式就两种，一种是自写或嵌入源代码，一种是录制生成。常常听见有人说，这两种方式中首选录制生成脚本，因为它简单且智能化。但我个人总觉得手写脚本要好一些，因为： <BR>1．可读性好，流程清晰，检查点截取含义明确。业务级的代码读起来总比协议级的代码更易让人理解，也更容易维护，必要时可建立一个脚本库。而录制生成的代码大多没有维护的价值，现炒现卖。 <BR>2．手写的程序相比录制的脚本更能真实地模拟应用运行。因为录制的脚本是截获了网络包，生成了协议级的代码，而略掉了client端的处理逻辑。举个例子，用VU录制一个运行script和applet的IE行为，它只会生成http协议的API，在IE中运行的applet和script不会被模拟到，这就不是一个完整的系统。 <BR>3．手写程序相比录制脚本更能增加测试人员的技术含量。开发和测试能力双重提高，何乐而不为呢？loadrunner提供了java user，vb user，c user等语言类型的脚本，就是给我们开发脚本用的，而不是录制用的。 <BR>脚本不管录制也好，还是手写也好，选择的时候应该以脚本模拟程序真实有效为准，结合项目进度，开发难易程度等因素考虑。 <BR>在这里我想要说的是，开发一个好的脚本是成功性能测试的必要条件。一个好的脚本应该能够最大程度再现client程序行为。如上面那个例子，脚本只模拟了client端的部分行为，有一些没有模拟到，那么client的瓶颈就有可能被忽略了。我曾吃过一个亏，自己写了一个java socket脚本去联server，但是忽略了client端的界面下的业务逻辑，用我的脚本做性能测试通过，全部OK，但是真实用户一上线，client终端界面接受了大量的server信息，导致client进程死掉了。痛哉，痛哉。</FONT></P>
<P align=left><BR><FONT size=4>三．组建并执行性能测试场景。 <BR>从VU运行成功到controller运行成功，一般需要以下几个步骤（我也是从英文论坛上看到的，觉得不错，拿出来共享）： <BR>1. 确认在VU里SUSI（单用户单循环次数single user &amp; single iteration） <BR>2. 确认在VU里SUMI（单用户多循环次数single user &amp; multi iteration） <BR>3. 确认在controller中MUSI（多用户单循环次数multi user &amp; single iteration） <BR>4. 确认在controller中MUMI（多用户多循环次数 multi user &amp; multi iteration） </FONT></P>
<P align=left><BR><FONT size=4>做这样一个步骤划分是有道理的，第一步骤是验证脚本编写的正确，第二步骤可以验证数据池是否正常运作。第三步骤验证并发功能，第四步骤是最终目的，验证软件系统的性能。在论坛上看到一些朋友提的问题，有一些就是于此的，在controller中运行场景时出现问题，首先得保证VU中运行成功，这是一个显然的逻辑。软件工程中把软件开发的种种行为都要制定一个proccess，即过程，性能测试也是如此，按照过程来调试脚本和场景，能及早发现问题和定位问题。除非是高手，烂熟于心中，才能超越proccess而不出问题。 <BR>场景是把虚拟用户和交易数按一定规则组织起来去模拟真实世界的业务行为。这其实是把单个用户的行为复制，连接。场景的组织通常和真实世界的业务规则有很大关系。 <BR>做个如下可能并不恰当的比喻： <BR>脚本像演员，场景就像表演的舞台，而测试工程师是导演，多少个演员，怎么在舞台上演出，都由导演说了算，而剧情又不能离谱，脱离现实，否则就要砸锅了。注意，导演的职责不光是确保演出能顺利结束，而且还要同时观察和收集观众的反馈信息，以确认这次演出是否成功。 <BR>同样的也是，性能测试人员不光是看场景是否得到顺利的执行，同时还要收集各个server的反馈信息，以确认软件系统的性能表现是否正常。 <BR>在真实世界中的用户业务规则要转换到可操作的性能指标是需要分析和计算的。当然这通常是市场需求分析人员干的活，但我觉得测试人员应该在做性能测试时，对这些指标进行理解，知道为什么要这样做。有时有的性能指标并不清楚和准确，还需要测试人员来分析。比如一个性能指标：要求软件系统支持每分钟700用户的登陆行为。这对于测试人员来说，其实是一个不确切的性能需求。这指的是瞬时并发用户700，在一分钟的响应时间要求下登陆系统？还是在一分钟内陆续有700个用户登入软件系统即可？这两种场景其实对软件系统的压力是不同的，第一种显然大，第二种要小一些。甚至有的性能需求就是支持50000注册用户，这种需求就更需要分析了，还要引入一些业务发生概率算法模型来做。这已经不是性能测试人员的职责了，但由于目前有不少软件公司流程不规范，或者有流程没执行，这些工作都要测试人员来做了，不过也好，正好是锻炼的机会。 </FONT></P>
<P align=left><BR><FONT size=4>四．分析结果数据，找到软件系统性能瓶颈 <BR>上面说了，做了那么多，就是为了本步骤－寻找软件系统性能瓶颈。 <BR>个人认为寻找性能瓶颈是一个非常有挑战性的工作，毛主席曾经说过：一个优秀的指战员就是能够根据已有的客观形势，制定作战计划，然后在作战过程中，发现计划与执行不符的地方，分析，然后调整作战计划，缩小计划和战势的误差。简明一句：就是一个理论和实践结合的过程，一个人的主观思想和客观现实的结合过程（注明：本人是毛主席老人家的忠实fans）。 <BR>在性能测试中，测试方案就是我们的作战计划，执行性能测试就是我们的作战战场。在性能测试中，可能会发现种种意想不到的问题。当然一个经验足够丰富的性能测试专家可能会在测试之前就能考虑全面，使测试方案吻合测试执行实际情况，并一举找出性能瓶颈。我sunshinelius不是专家水平，当然就要匆忙应对和分析性能测试中出现的问题，并有可能会修改测试方案，增加必要的test case，删除没用的test case。总之，性能测试是一个不断修改测试方案，反复执行test case的过程，直至越来越逼近性能瓶颈。在此过程中，需要了解很多的知识，知识了解得越多，就越接近软件系统运行的真相，也就能找出性能瓶颈了。 <BR>比如：loadrunner要是调用程序员的程序，服务器资源占用情况可能是追查瓶颈的一个线索，但如果是标准中间件，那就没那么简单了，比如oracle数据库的某项参数设得不对，照样会造成数据库瓶颈，应用程序调用数据库的API写法不对，比如未使用软解析变量，也有可能导致数据库瓶颈。这些瓶颈都不会反映在cpu，内存使用量上等指标上的。 <BR>对于这种情况，一方面需要对中间件有一定的了解，知道哪些参数有什么作用，怎么可调的，另外还可能使用中间件的专有监测工具，来分析。lr的性能计数器是不够用的。 <BR>个人体会，查找瓶颈的难易程度，由易到难 <BR>服务器硬件瓶颈-〉网络瓶颈-〉应用瓶颈-〉服务器操作系统瓶颈（参数配置）-〉中间件瓶颈（参数配置，数据库，web服务器等） <BR>记忆比较深刻的一次，用lr做了两天性能测试，指标上不去，后来使用oracle数据库的图形化性能检测工具才发现某个表的查询处理时间超长，原来索引创建得不合理，把表的索引改了之后，性能稍有提高，但还是上不去。再次排查，发现应用中有一个sql语句写得有问题，长而且耗时，改了之后，测试指标还是上不去 <BR>经过至少四轮的排查，才大功告成，最后一个除掉的瓶颈是操作系统问题（开始没有想到它，后来看系统消息，才发现已经有错误报出）</FONT></P></TD></TR></TBODY></TABLE></P><img src ="http://www.blogjava.net/xiaomage234/aggbug/5750.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaomage234/" target="_blank">小马歌</a> 2005-06-08 17:09 <a href="http://www.blogjava.net/xiaomage234/articles/5750.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(转)BEA WebLogic平台下J2EE调优攻略</title><link>http://www.blogjava.net/xiaomage234/articles/5745.html</link><dc:creator>小马歌</dc:creator><author>小马歌</author><pubDate>Wed, 08 Jun 2005 08:55:00 GMT</pubDate><guid>http://www.blogjava.net/xiaomage234/articles/5745.html</guid><wfw:comment>http://www.blogjava.net/xiaomage234/comments/5745.html</wfw:comment><comments>http://www.blogjava.net/xiaomage234/articles/5745.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaomage234/comments/commentRss/5745.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaomage234/services/trackbacks/5745.html</trackback:ping><description><![CDATA[<FONT size=4>摘要： </FONT>
<P><FONT size=4>　　随着近来J2EE软件广泛地应用于各行各业，系统调优也越来越引起软件开发者和应用服务器提供商的重视。而对于最终客户来说，在一个高效、稳定地实现他们的业务需求已经是他们的基本要求。所以J2EE调优显得非常重要，而BEA WebLogic Server是业界领先的应用服务器，BEA WebLogic平台下的J2EE调优也就尤为重要,她将为我们提供普遍的J2EE调优方案。最近网络、杂志上的J2EE调优文章层出不穷。本人也将自己平时工作中的一些经验积累分享给大家，抛砖引玉。</FONT><A id=0 name=0></A></P>
<P><BR><FONT size=4>目录</FONT></P>
<P><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#1"><FONT size=4>前 言</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#1"><FONT size=4>第一章 应用程序调优</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#1_1_1"><FONT size=4>1.1.1 通用代码调优</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#1_1_2"><FONT size=4>1.1.2 减小没有必要的操作</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#1_1_3"><FONT size=4>1.1.3 使用合适的类型</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#1_1_4"><FONT size=4>1.1.4 尽量使用pool,buffer和cache</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#1_2"><FONT size=4>1.2 JDBC代码调优</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#1_2_1"><FONT size=4>1.2.1 严格资源使用</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#1_2_2"><FONT size=4>1.2.2 实用技巧</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#1_2_3"><FONT size=4>1.2.3 优化SQL语句</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#1_3"><FONT size=4>1.3 Web代码调优</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#1_3_1"><FONT size=4>1.3.1 HttpSession的使用</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#1_3_2"><FONT size=4>1.3.2 JSP代码调优</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#1_3_3"><FONT size=4>1.3.3 Servlet代码调优</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#1_4"><FONT size=4>1.4 JMS代码调优</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#1_4_1"><FONT size=4>1.4.1 注意必要的事项，避免使用不必要的特征</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#1_4_2"><FONT size=4>1.4.2 消息类型的选择</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#1_4_3"><FONT size=4>1.4.3 确认方式的选择和JMS事务</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#1_5"><FONT size=4>1.5 EJB代码调优</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#1_5_1"><FONT size=4>1.5.1 有效使用设计模式</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#1_5_2"><FONT size=4>1.5.2 使用EJB和WebLogic的特性</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#1_5_3"><FONT size=4>1.5.3 缓存资源</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#1_5_4"><FONT size=4>1.5.4 如何选择和使用Entity Bean</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#1_5_5"><FONT size=4>1.5.5 其他的一些小技巧</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#2"><FONT size=4>第二章 应用服务器调优</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#2_1"><FONT size=4>2.1 JVM调优</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#2_1_1"><FONT size=4>2.1.1 垃圾收集和堆大小</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#2_1_2"><FONT size=4>2.1.2 jRockit调优</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#2_2"><FONT size=4>2.2 Server调优</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#2_2_1"><FONT size=4>2.2.1 尽量使用本地I/O库</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#2_2_2"><FONT size=4>2.2.2 调整默认执行线程数</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#2_2_3"><FONT size=4>2.2.3 调整连接参数</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#2_2_4"><FONT size=4>2.2.4 创建新的执行队列</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#2_3"><FONT size=4>2.3 JDBC调优</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#2_3_1"><FONT size=4>2.3.1 调整连接池配置</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#2_4"><FONT size=4>2.4 WEB调优</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#2_4_1"><FONT size=4>2.4.1 调整WEB应用描述符</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#2_5"><FONT size=4>2.5 JMS调优</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#2_6"><FONT size=4>2.6 EJB调优</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#2_6_1"><FONT size=4>2.6.1 调整pool和cache</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#2_6_2"><FONT size=4>2.6.2 优化事务隔离级别和事务属性</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#2_6_3"><FONT size=4>2.6.3 其他一些小技巧</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#3"><FONT size=4>第三章 数据库调优</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#3_1_1"><FONT size=4>3.1.1 Oracle性能优化</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#3_1_2"><FONT size=4>3.1.2 Oracle的其他调整</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#4"><FONT size=4>第四章 操作系统调优</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#4_1"><FONT size=4>4.1 操作系统调整</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#4_1_1"><FONT size=4>4.1.1 HP-UX</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#4_1_2"><FONT size=4>4.1.2 Solaris</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#4_1_3"><FONT size=4>4.1.3 AIX</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#4_1_4"><FONT size=4>4.1.4 Linux</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#4_1_5"><FONT size=4>4.1.5 Windows</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#5"><FONT size=4>第五章 性能监控和性能分析</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#5_1"><FONT size=4>5.1 性能瓶颈</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#5_2"><FONT size=4>5.2 操作系统监控</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#5_3"><FONT size=4>5.3 数据库监控</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#5_4"><FONT size=4>5.4 WebLogic监控</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#5_4_1"><FONT size=4>5.4.1 JVM监控</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#5_4_2"><FONT size=4>5.4.2 Console监控</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#5_4_3"><FONT size=4>5.4.3 实用工具分析</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#5_5"><FONT size=4>5.5 应用程序分析</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#6"><FONT size=4>总结</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#7"><FONT size=4>参考文献</FONT></A><BR><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#8"><FONT size=4>关于作者</FONT></A><A id=1 name=1></A></P>
<P><B><FONT size=4>前 言 </FONT></B><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#0"><FONT size=4>(目录)</FONT></A></P>
<P><FONT size=4>　　随着近来J2EE软件广泛地应用于各行各业，系统调优也越来越引起软件开发者和应用服务器提供商的重视。而对于最终客户来说，在一个高效、稳定地实现他们的业务需求已经是他们的基本要求。所以J2EE调优显得非常重要，而BEA WebLogic Server是业界领先的应用服务器，BEA WebLogic平台下的J2EE调优也就尤为重要,她将为我们提供普遍的J2EE调优方案。最近网络、杂志上的J2EE调优文章层出不穷。本人也将自己平时工作中的一些经验积累分享给大家，抛砖引玉。<BR><BR>　　本文从J2EE应用架构（下图）来分别剖析系统调优，首先我们一般会从应用程序出发，去审核代码，做到代码级的优化，然后再调整应用服务器(BEA WebLogic8.1)和数据库 (Oracle9i)的参数，最后当然是调整操作系统和网络的性能(包括硬件升级)。诚然,在我遇到的很多项目中,都是出现了性能问题后才想到调优,而且一般都是先进行系统参数调整,实在解决不了才会对代码进行检查.实际上,我们应当将代码级的调优放在应用设计时来做,测试生产时修改代码将是一件极其痛苦的事情。</FONT></P>
<P align=center><FONT size=4><IMG height=311 src="mhtml:file://C:\Documents and Settings\mage\桌面\blogjava\BEA WebLogic平台下J2EE调优攻略.mht!http://dev2dev.bea.com.cn/images/image2004111688.gif" width=715><BR>WebLogic平台J2EE应用架构</FONT></P>
<P><A id=1 name=1><FONT size=4></FONT></A></P>
<P><BR><FONT size=4><B>第一章 应用程序调</B>优</FONT><A id=1_1_1 name=1_1_1></A><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#0"><FONT size=4>(目录)</FONT></A><BR><B><FONT size=4>1.1.1 通用代码调优</FONT></B><A id=1_1_2 name=1_1_2></A><BR><BR><FONT size=4><B>1.1.2 减小没有必要的操作</B><BR>　　对象的创建是个很昂贵的工作,所以我们应当尽量减少对象的创建,在需要的时候声明它,初 始化它,不要重复初始化一个对象,尽量能做到再使用,而用完后置null有利于垃圾收集。让类实现Cloneable接口,同时采用工厂模式,将减少类的创建,每次都是通过clone()方法来获得对象。另外使用接口也能减少类的创建。对于成员变量的初始化也应尽量避免, 特别是在一个类派生另一个类时。<BR><BR>　　异常抛出对性能不利。抛出异常首先要创建一个新的对象。Throwable接口的构造函数调用名为, fillInStackTrace()的本地（Native）方法，fillInStackTrace()方法检查堆栈，收集调用跟踪信息。只要有异常被抛出，VM就必须调整调用堆栈，因为在处理过程中创建了一个新的对象。 异常只能用于错误处理，不应该用来控制程序流程。<BR><BR>　　此外, 建议关闭Debug输出,尽量少用串行化、同步操作和耗时昂贵的服务(如Date())。</FONT><A id=1_1_3 name=1_1_3></A><BR><B><BR><FONT size=4>1.1.3 使用合适的类型</FONT></B><BR><FONT size=4>　　当原始类型不能满足我们要求时,使用复杂类型。String和StringBuffer的区别自不必说了,是我们使用最多的类型,在涉及到字符运算时,强烈建议使用StringBuffer。在做String匹配时使用intern()代替equal()。<BR><BR>　　带有final修饰符的类是不可派生的, 如果指定一个类为final，则该类所有的方法都是final。<BR><BR>　　Java编译器会寻找机会内联所有的final方法,这将能够使性能平均提高50%。类的属性和方式使用final或者static修饰符也是有好处的。<BR><BR>　　调用方法时传递的参数以及在调用中创建的临时变量都保存在栈（Stack）中，速度较快。所以尽量使用局部变量。<BR><BR>　　ArrayList和Vector,HashMap和Hashtable是我们经常用到的类,前者不支持同步,后者支持同步,前者性能更好,大多数情况下选择前者。</FONT><A id=1_1_4 name=1_1_4></A><BR><BR><FONT size=4><B>1.1.4 尽量使用pool,buffer和cache</B><BR>　　使用pool、buffer和cache能大大提高系统的性能,这在J2EE的大部分技术中都是适用的。<BR><BR>　　在WebLogic中就大量使用了池:JDBC Connection Pool、Socket Pool、Object Pool和Thread Pool。I/O操作中,buffer是必须的,特别是对大文件的操作,不然容易造成内存溢出。字节操作最快,所以尽可能采用write(byte[])，Buffered FileOutputStream比Buffered FileWriter要快,因为FileWriter需要Unicode到Byte的转换。<BR><BR>　　而后面讲到的JDBC、JSP、EJB和JMS我们都非常建议使用buffer和cache。为HttpServletResponse设置buffersize,使用wl-cache,缓存在JNDI树上获取的对象等等。<BR><BR>　　此外,使用JDK 1.4的非阻塞I/O对性能也有很大提高。 </FONT><A id=1_2 name=1_2></A><BR><BR><B><FONT size=4>1.2 JDBC代码调优</FONT></B><A id=1_2_1 name=1_2_1></A><BR><FONT size=4><B>1.2.1 严格资源使用</B><BR>　　JDBC代码调优最大的原则就是使用WebLogic的连接池,而不是自己直连数据库。在我接触的很多自己实现连接池的项目中,大部分遇到死锁和连接泄漏的问题，最后得不得修改代码。而WebLogic提供了功能强大，性能良好的数据库连接池，我们要做的只是封装一个连接管理类，从JNDI树上获取数据源并缓存，得到连接，并提供一系列关闭数据库资源的方法。<BR><BR>　　对任何资源使用的原则是用完即关，不管是数据库资源、上下文环境，还是文件。数据库资源的泄漏极易造成内存泄漏，乃至系统崩溃。在使用完数据库资源后依次关闭ResultSet，Statement和Connection，而在一个数据库连接多次进行数据库操作时要特别注意ResultSet和Statement依次关闭。<BR><BR>try{<BR>　　//open connection<BR>　　pstmt =conn.prepareStatement(strSql1);<BR>　　pstmt.executeUpdate();<BR>　　pstmt.close();<BR>　　pstmt =conn.prepareStatement(strSql2);<BR>　　rs=pstmt.executeQuery();<BR>　　while (rs.next()){<BR>　　//process<BR>　}<BR>rs.close();<BR>pstmt.close();<BR>　}catch(Exception e){<BR>　　//close rs,psmt,con<BR>}finally{<BR>　　//close rs,psmt,con<BR>}</FONT><A id=1_2_2 name=1_2_2></A><BR><BR><FONT size=4><B>1.2.2 实用技巧</B><BR>　　在JDBC操作中还有一些小的技巧跟大家分享：由于获取连接时默认自动提交方式，使用connection.setAutoCommit(false)关闭自动提交，使用PreparedStatement,批量更新,业务复杂或者大数据量操作时使用存储过程，尽量使用RowSet，此外设置记录集读取缓存FetchSize和设置记录集读取方向FetchDirection对性能也有一定的提高。</FONT><A id=1_2_3 name=1_2_3></A><BR><BR><FONT size=4><B>1.2.3 优化SQL语句</B><BR>　　SQL语句的优化牵涉到很多数据库的知识，需要与索引配合，因此需要DBA对代码中的SQL进行检查测试。常见的，select *不提倡使用，效率极差，建议显式获取列，即使是所有字段也应罗列，而取总数时使用count(*),为提高cache的命中率，尽量做到SQL重用。对于大数据量的查询，可以充分利用Oracle数据库的特性，每次取出m-n行的数据，实现分页查询。另外，提高性能的好选择可能就是把所有的字符数据都保存为Unicode，Java以Unicode形式处理所有数据，因此，数据库驱动程序不必再执行转换过程。</FONT><A id=1_3 name=1_3></A><BR><BR><B><FONT size=4>1.3 Web代码调优</FONT></B><A id=1_3_1 name=1_3_1></A><BR><FONT size=4><B>1.3.1 HttpSession的使用</B><BR>　　应用服务器保存很多会话时，容易造成内存不足，所以尽量减少session的使用，放置session<BR>里的对象不应该是大对象，最好是简单小对象，实现串行化接口。当会话不再需要时，应当及时调用invalidate()方法清除会话。而当某个变量不需要时，及时调用removeAttribute()方法清除变量。请勿将EJB对象放置在session中。</FONT><A id=1_3_2 name=1_3_2></A><BR><BR><FONT size=4><B>1.3.2 JSP代码调优</B><BR>　　目前，在JSP页面中引入外部资源的方法主要有两种：include指令，以及include动作。 include指令：例如&lt;%@ include file="copyright.html" %&gt;，该指令在编译时引入指定的资源。在编译之前，带有include指令的页面和指定的资源被合并成一个文件。被引用的外部资源在编译时就确定，比运行时才确定资源更高效。<BR>include动作：例如&lt;jsp:include page="copyright.jsp" /&gt;。该动作引入指定页面执行后生成的结果。由于它在运行时完成，因此对输出结果的控制更加灵活。但是，只有当被引用的内容频繁地改变时，或者在对主页面的请求没有出现之前，被引用的页面无法确定时，使用include动作才合算。 <BR><BR>　　对于那些无需跟踪会话状态的jsp，关闭自动创建的会话可以节省一些资源。使用如下page指令： &lt;%@ page session="false"%&gt; ;尽量不要将JSP页面定义为单线程，应设置为&lt;%@page isThreadSafe=”true”%&gt;;在JSP页面最好使用输出缓存功能，如: &lt;%@page buffer="32kb"%&gt;;尽量用wl:cache定制标记来缓存静态或相对静态的内容，缓存jsp:include操作的结果能显著提高应用程序的运行性能。</FONT><A id=1_3_3 name=1_3_3></A><BR><BR><FONT size=4><B>1.3.3 Servlet代码调优</B><BR>　　Servlet代码调优比较简单：在Servlet之间跳转时，forward比sendRedirect更有效；设置HttpServletResponse 缓冲区，如：response.setBufferSize(20000);在init()方法里缓存静态数据，而在destroy()中释放它；建议在Servlet里使用ServletOutputStream输出图片等对象；避免在Servlet和Jsp中定界事务等。</FONT><A id=1_4 name=1_4></A><BR><BR><B><FONT size=4>1.4 JMS代码调优</FONT></B><A id=1_4_1 name=1_4_1></A><BR><FONT size=4><B>1.4.1 注意必要的事项，避免使用不必要的特征</B><BR>　　JMS提供了强有力的消息处理机制，但是为了最大限度的提高JMS系统的性能，应避免使用不需要使用的特征，同时也要注意必要的事项。比如：尽量使用接收程序能直接使用的最简单、最小的消息类型；消息选择器要尽可能简单(最好不使用)，尽量不要使用复杂的操作符，如like、in或者between等,使用字符串数据类型的速度最慢;务必为特定的应用程序定义特定的JMS连接工厂，并且禁用默认的JMS连接工厂；不要在javax.*与weblogic.*的名字空间中使用JNDI名称；尽量使用异步消费者，线程不必封锁以等待消息的到达;使用完JNDI树上的资源后注意关闭。</FONT><A id=1_4_2 name=1_4_2></A><BR><BR><FONT size=4><B>1.4.2 消息类型的选择</B><BR>　　标准JMS提供了五种消息类型，而TextMessage应用最为普遍, 当发送的消息是几种原始数据类型的集合体时，最好使用MapMessage消息类型，而不要使用ObjectMessage，以便减少不同系统间的耦合。此外消息是否使用压缩要慎重考虑，压缩未必能减少消息大小。如果生产者、消费者和目的地并置在同一WebLogic Server内部，通常不使用压缩。WebLogic特有的XMLMessage能为运行于消息主体之上的消息选择器提供内嵌式支持，而且易于数据交换。因此，建议应用程序之间传送消息使用XML消息格式，而应用程序内部间传送消息使用二进制消息格式。</FONT><A id=1_4_3 name=1_4_3></A><BR><BR><FONT size=4><B>1.4.3 确认方式的选择和JMS事务</B><BR>　　使用事务性会话时,尽量使用恰当的消息确认方式:如果需求允许,使用NO_ACKKNOWLEDGE;非持久的订阅者使用DUPS_OK_ACKNOWLEDGE或者MULTICAST_NO_ACKNOWLEDGE。而使用JTA的UserTransaction，确认方式将被忽略。在使用JMS事务时，无效的消息会导致事务的回滚，以致消息重发这样的死循环。此时，可以将无效消息发送到错误消息队列，并提交JMS事务，这将确保消息不会再次传递。</FONT><A id=1_5 name=1_5></A><BR><BR><B><FONT size=4>1.5 EJB代码调优</FONT></B><A id=1_5_1 name=1_5_1></A><BR><FONT size=4><B>1.5.1 有效使用设计模式</B><BR>　　GoF 的《设计模式》为我们实现高性能、易扩展的J2EE应用提供理论保障和技术支持。而EJB作为J2EE的核心组件和技术，善用设计模式对系统性能影响很大。Service Locator 和Value Object 已为我们所熟悉，Floyd Marinescu的《EJB Design Patterns》中的Session Fa?ade、Message Fa?ade、EJB Command和Data Transfer Object等设计模式更是为我们提供设计典范：缓存对EJBHome的访问；使用门面模式，不暴露Entity Bean，用Session Bean封装Entity Bean；如果可以异步处理，则用MDB代替Session Bean；封装业务逻辑在轻量级JavaBean中；使用值对象等简单对象传递数据;不直接使用get/set方法操作Entity Bean。当然过度使用模式或者牵强套用模式也是不提倡的，总的原则就是减少网络流量，改进事务管理。</FONT><A id=1_5_2 name=1_5_2></A><BR><BR><FONT size=4><B>1.5.2 使用EJB和WebLogic的特性</B><BR>　　使用EJB和WebLogic的新特性往往能提高性能。与EJB2.0特性相关的技巧有：一个Application中使用本地接口，对于Entity Bean肯定使用本地接口，避免远程调用的开销；使用CMP管理关系，而不是BMP，EJB2.0中CMP的性能大大改善，性能和移植性都优于BMP；使用ejbSelect进行内部查询；使用home方法进行外部查询和批处理; 数据库驱动级联删除等。<BR><BR>　　与WebLogic特性相关的技巧有:使用自动生成主键,WebLogic为Oracle和Sqlserver两种数据库的CMP提供了自动生成主键功能,节约了Entity Bean产生主键的时间,同时设key-cache-size不小于100;WebLogic管理事务性能更好,使用容器管理,而不是Bean管理事务;WebLogic提供了为CMP动态查询和批量插入功能,对性能也有很大帮助。</FONT><A id=1_5_3 name=1_5_3></A><BR><BR><FONT size=4><B>1.5.3 缓存资源</B><BR>　　对SLSB或者MDB来说,使用setMesssageDrivenContext()或者ejbCreate()方法缓存特定资源,在ejbRemove()方法里释放; 对SLSB或者MDB来说,使用setSessionContext()或者ejbCreate()方法缓存特定资源,在ejbRemove()方法里释放;对Entity Bean来说,使用setEntityContext ()方法缓存特定资源,在unSetEntityContext ()方法里释放。<BR><BR><B>1.5.4 如何选择和使用Entity Bean</B><BR>　　1. 在设计EJB时，要适当考虑EJB的粒度, 细粒度的EJB在事务管理和资源管理的开销太大,尽量创建粗粒度的 EJB , 不要太粗，粗到能满足实际需求就可以;<BR><BR>　　2. Entity Bean不是唯一方式,如果只有一个很小的数据子集被经常改变，建议采用JDO;<BR><BR>　　3. 在操作大数据量的时候,直接采用JDBC比Entity Bean更有效;<BR><BR>　　4. 避免采用返回很大数据组的finder方法,如 FindAll() 方法，因为它的实现代价太大;<BR><BR>　　5. 考虑设置域组field groups,减少没有必要并昂贵的属性加载,如BLOB;<BR><BR>　　6. 对于EJB1.1或者BMP,可以设置is-modified-method-name属性,根据isModified()的值来判断是否调用ejbStore()等方法,减少没有必要运算;<BR><BR>　　7. 避免连接多个表创建BMP,可以使用视图,存储过程或者O/R Mapping等方式。</FONT><A id=1_5_5 name=1_5_5></A><BR><BR><FONT size=4><B>1.5.5 其他的一些小技巧</B><BR>　　1. 考虑使用 javax.ejb.SessionSynchronization 接口,提供在Rollback之后恢复数据的方法: afterBegin(), beforeCompletion(), afterCompletion();<BR>　　2. 使用完SFSB之后，调用remove()方法释放实例;<BR>　　3. 假如你不需要EJB服务的时候,建议使用普通Java类;<BR>　　4. 避免EJB之间相互调用;<BR>　　5. 使用多读模式。</FONT><A id=2 name=2></A><BR><BR><B><FONT size=4>第二章 应用服务器调优</FONT><A id=2_1 name=2_1></A><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#0"><FONT size=4>(目录)</FONT></A><BR><FONT size=4>2.1 JVM调优</FONT><A id=2_1_1 name=2_1_1></A><BR><FONT size=4>2.1.1 垃圾收集和堆大小</FONT></B><BR><FONT size=4>　　垃圾收集(GC)是指JVM释放Java堆中不再使用的对象所占用的内存的过程,而Java堆(Heap)是指Java应用程序对象生存的空间。堆大小决定了GC的频度和时间。堆越大,GC频度低,速度慢。堆越小,GC频度高,速度快。所以GC和堆大小是一组矛盾。为了获取理想的Heap堆大小,需要使用-verbosegc参数(Sun jdk: -Xloggc:&lt;file&gt;)以打开详细的GC输出。分析GC的频度和时间,结合应用最大负载所需内存情况,得出堆的大小。<BR>通常情况下,我们建议使用可用内存(除操作系统和其他应用程序占用之外的内存)70-80%,为避免堆大小调整引起的开销,设置内存堆的最小值等于最大值即:-Xms=-Xmx。而为了防止内存溢出,建议在生产环境堆大小至少为256M(Platform至少512M),实际环境中512M~1G左右性能最佳,2G以上是不可取的,在调整内存时可能需要调整核心参数进程的允许最大内存数。对于sun和hp的jvm,永久域太小(默认4M)也可能造成内存溢出,应增加参-XX:MaxPermSize=128m。建议设置临时域-Xmn的大小为-Xmx的1/4~1/3, SurvivorRatio为8。<BR><BR>　　为了获得更好的性能,建议在启动文件设置WebLogic为产品模式,此时sun和hp jvm JIT引擎为-server,默认情况下打开JIT编译模式对性能也有帮助。调整Chunk Size和Chunk Pool Size也可能对系统的吞吐量有提高。此外还需关闭显示GC: -XX:+DisableExplicitGC。<BR><BR>　　当然在Intel平台上使用jRockit（使用参数-jrockit）无疑大大提高WebLogic性能。<BR><BR><B>2.1.2 jRockit调优</B><BR>　　jRockit支持四种垃圾收集器：分代复制收集器、单空间并发收集器、分代并发收集器和并行收集器。默认状态下，JRockit使用分代并发收集器。要改变收集器，可使用-Xgc:&lt;gc-name&gt;,对应四个收集器分其他为gencopy, singlecom, gencon以及parallel。为得到更好的响应性能，应该使用并发垃圾回收器：-Xgc:gencon，可使用-Xms和-Xmx设置堆栈的初始大小和最大值,要设置护理域-Xns为-Xmx的10%。而如果要得到更好的性能，应该选用并行垃圾回收器:-Xgc: parallel，由于并行垃圾回收器不使用nursery，不必设置-Xns。<BR><BR>　　如果你的线程大于100或者在linux平台下，可以尝试使用瘦线程模式：-Xthinthread,同时关闭Native IO:-Xallocationtype:global。<BR><BR>　　jRockit 还提供了强大的图形化监控工具Jrockit Management Console。欲详细了解JRockit可访问：</FONT><A href="http://edocs.bea.com/wljrockit/docs81/index.html" target=_blank><FONT size=4>http://edocs.bea.com/wljrockit/docs81/index.html</FONT></A><FONT size=4>。</FONT></P>
<P align=center><FONT size=4><IMG height=449 src="mhtml:file://C:\Documents and Settings\mage\桌面\blogjava\BEA WebLogic平台下J2EE调优攻略.mht!http://dev2dev.bea.com.cn/images/image2004111689.jpg" width=554></FONT></P>
<P><A id=2_2 name=2_2></A><BR><FONT size=4><B>2.2 Server调优</B><BR>　　WebLogic Server的核心组件由监听线程,套接字复用器和可执行线程的执行队列组成。当服务器由监听线程接收到连接请求后,将对它的连接控制权交给等待接收请求的套接字复用器。然后套接字复用器读取离开套接字的请求,并将此请求及相关安全信息或事务处理环境一起置入适当的执行队列中(一般为默认的执行队列)。 当有一个请求出现在执行队列中时，就会有一个空闲的执行线程从该队列中取走发来的该</FONT><A id=2_2_1 name=2_2_1></A><FONT size=4>请求，并返回应答，然后等待下一次请求。因此要提高WebLogic的性能,就必须从调整核心组件性能出发。<BR><BR><B>2.2.1 尽量使用本地I/O库</B><BR>WebLogic Server有两套套接字复用器：Java版和本地库。采用小型本地库更有效,尽量激活Enable Native IO(默认),此时UNIX默认使用CPUs+1个线程,Window下为双倍CPU。如果系统不能加载本地库,将会抛出java.lang.UnsatisfiedLinkException,此时只能使用Java套接字复用器,可以调整socket readers 百分比,默认为33%。该参数可以在Console Server Tuning Configuration配置栏里设置。</FONT><A id=2_2_2 name=2_2_2></A><BR><BR><FONT size=4><B>2.2.2 调整默认执行线程数</B><BR>　　理想的默认执行线程数是由多方面的因素决定的,比如机器CPU性能、总线体系架构、I/O、操作系统的进程调度机制、JVM的线程调度机制。WebLogic生产环境下默认的线程为25个,随着CPU个数的增加,WebLogic可以近乎线性地提高线程数。线程数越多，花费在线程切换的时间也就越多,线程数越小,CPU可能无法得到充分利用。为获取一个理想的线程数,需要经过反复的测试。在测试中,可以以25*CPUs为基准进行调整。当空闲线程较少,CPU利用率比较低时,可以适当增加线程数的大小(每五个递增)。对于PC Server 和Window 2000，则最好每个CPU小于50个线程, 以CPU利用率为90%左右为佳。由于目前WebLogic执行线程没有缩小线程数的功能,所以应将参数Threads Increase设置为0,同时不应改变优先级的大小。</FONT><A id=2_2_3 name=2_2_3></A><BR><BR><FONT size=4><B>2.2.3 调整连接参数</B><BR>　　WebLogic Server用Accept Backlog参数规定服务器向操作系统请求的队列大小，默认值为50。当系统重载负荷时,这个值可能过小,日志中报Connection Refused,导致有效连接请求遭到拒绝,此时可以提高Accept Backlog 25%直到连接拒绝错误消失。对于Portal类型的应用,默认值往往是不够的。Login Timeout和SSL Login Timeout参数表示普通连接和SSL连接的超时时间,如果客户连接被服务器中断或者SSL容量大,可以尝试增加该值。这些参数可以在Console Server Tuning Configration配置栏里找到。</FONT><A id=2_2_4 name=2_2_4></A><BR><BR><FONT size=4><B>2.2.4 创建新的执行队列</B><BR>　　创建新的执行队列有助于解决核心业务优先、避免交叉阻塞、死锁和长时间处理的业务等问题。通常会将自己的执行队列和默认的执行队列设置不同的优先级,这里优先级不应设为9或者10。 定义一个新的执行队列很容易,利用View Excute Queue选项中的Configure a new Excute Queue链接即可定制新的执行队列。创建新的执行队列后，用户需要为应用程序的J2EE组件配置分配策略，以便它可以找到新的队列。举个例子：要将servlet或jsp捆绑到一个特定的执行队列，必须替换web.xml文件项，将wl-dispatch-policy初始化参数设置为自己的执行队列名。<BR><BR>&lt;servlet&gt;<BR>&lt;servlet-name&gt;servletname&lt;/servlet-name&gt;<BR>&lt;jsp-file&gt;/directoryname/deployment.jsp&lt;/jsp-file&gt;<BR>&lt;init-param&gt;<BR>&lt;param-name&gt;wl-dispatch-policy&lt;/param-name&gt;<BR>&lt;param-value&gt;NewExecuteQueueName&lt;/param-value&gt;<BR>&lt;/init-param&gt;<BR>&lt;/servlet&gt;<BR><BR>　　我们可以为一个jsp或者servlet乃至一个WEB应用设置自己的执行队列。同时也可以为EJB设置自己的执行队列。对于执行时间比较长的MDB,建议使用自己的执行队列。</FONT><A id=2_3 name=2_3></A><BR><BR><B><FONT size=4>2.3 JDBC调优</FONT><A id=2_3_1 name=2_3_1></A><BR><FONT size=4>2.3.1 调整连接池配置</FONT></B><BR><FONT size=4>　　JDBC Connection Pool的调优受制于WebLogic Server线程数的设置和数据库进程数,游标的大小。通常我们在一个线程中使用一个连接,所以连接数并不是越多越好,为避免两边的资源消耗，建议设置连接池的最大值等于或者略小于线程数。同时为了减少新建连接的开销,将最小值和最大值设为一致。<BR><BR>　　增加Statement Cache Size对于大量使用PreparedStatement对象的应用程序很有帮助,WebLogic能够为每一个连接缓存这些对象,此值默认为10。在保证数据库游标大小足够的前提下,可以根据需要提高Statement Cache Size。比如当你设置连接数为25,Cache Size为10时,数据库可能需要打开25*10=250个游标。不幸的是,当遇到与PreparedStatement Cache有关的应用程序错误时,你需要将Cache Size设置为0。<BR><BR>　　尽管JDBC Connection Pool提供了很多高级参数,在开发模式下比较有用,但大部分在生产环境下不需调整。这里建议最好不要设置测试表, 同时Test Reserved Connections和Test Released Connections也无需勾上。 当然如果你的数据库不稳定,时断时续,你就可能需要上述的参数打开。 <BR><BR>　　最后提一下驱动程序类型的选择,以Oracle为例,Oracle提供thin驱动和oci驱动,从性能上来讲,oci驱动强于thin驱动,特别是大数据量的操作。但在简单的数据库操作中,性能相差不大,随着thin驱动的不断改进,这一弱势将得到弥补。而thin驱动的移植性明显强于oci驱动。所以在通常情况下建议使用thin驱动。而最新驱动器由于WebLogic server/bin目录下的类包可能不是最新的,请以Oracle网站为准: </FONT><A href="http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/htdocs/jdbc9201.html" target=_blank><FONT size=4>http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/htdocs/jdbc9201.html</FONT></A><FONT size=4>。</FONT><A id=2_4 name=2_4></A><BR><BR><B><FONT size=4>2.4 WEB调优</FONT><A id=2_4_1 name=2_4_1></A><BR><FONT size=4>2.4.1 调整WEB应用描述符</FONT></B><BR><FONT size=4>　　WEB应用除代码之外的调优比较简单,仅仅是对一些WEB应用描述符的调整。首先关闭Session Monitoring Enabled,仅仅在Cluster环境下设置Session复制(优先使用内存复制),在保证应用正常运行的情况下,设置较短的Session超时时间。 同时生产环境下无需检查Jsp和servlet：JSPPage Check Secs和Servlet Reload Check Secs均设为-1,关闭JSPKeep Generated 和JSPVerbose对性能也有帮助。此外，还可以对jsp进行预编译,有两种方法：激活precompile选项；使用weblogic.appc事先编译，建议采用后者。</FONT><A id=2_5 name=2_5></A><BR><BR><FONT size=4><B>2.5 JMS调优</B><BR>　　1. 增加-Dweblogic.JMSThreadPoolSize=n(至少为5),以提高处理JMS的线程数,在jRockit上增加-XXenablefatspin以减少加锁冲突;<BR>　　2. 采用文件存储策略,将同步写策略设置为Direct-Write,同时在windows平台上启用磁盘写入缓存;<BR>　　3. 使用分布式目的地时,激活连接工厂Load Balancing Enabled ,Server Affinity Enabled;<BR>　　4. 为减少服务器不必要的JMS请求路由,如果多个目的地之间存在事务,则部署在同一JMS服务器上,尽量将连接工厂部署到JMS服务器所在的WebLogic实例上,集群环境下，则最好将连接工厂部署到集群中的所有服务器上,而集群中每个JMS服务器和目的地成员尽量使用类似的设置；<BR>　　5. 启用消息分页存储功能,以释放内存,可以为JMS服务器和目的地设置, 激活Messages Paging Enabled和Bytes Paging Enabled,同时使用限额防止服务器耗尽接收消息的所有可用内存空间;<BR>　　6. 在运行WebLogic Server进程之外的生产者务必使用流控制, 并增大Send Timeout;<BR>　　7. 将JMS Server Expiration Scan Interval设很大的值，能禁止主动扫描过期消息;<BR>　　8. 使用FIFO或者LIFO方式处理目的地消息;<BR>　　9. MDB的max-beans-in-free-pool不应大于最大MDB线程数(默认线程数/2+1)。 </FONT><A id=2_6 name=2_6></A><BR><BR><B><FONT size=4>2.6 EJB调优</FONT><A id=2_6_1 name=2_6_1></A><BR><FONT size=4>2.6.1 调整pool和cache </FONT></B><BR><FONT size=4>　　initial-beans-in-free-pool定义SLSB启动时实例的个数,默认为0,可以调大到正常并发数的大小,以减少初始响应时间。max-beans-in-free-pool为最大个数,默认1000对SLSB来说,在频繁创建和删除实例的情况下很有帮助,一般不用调整,至少设为默认线程数,过大容易造成内存溢出。而对Entity Bean来说,由于是匿名的,所以当频繁使用finder、home和create方法时可以调大。<BR><BR>　　对SFSB来说,尽量将max-beans-in-cache参数设置得足够的大，以满足Bean实例对最大并发用户数的要求，可以避免有状态会话Bean过多的钝化行为。而idle-timeout-seconds尽量设置小,如果SFSB不用于存储Web应用会话状态可以设置为0。<BR><BR>　　对于Entity Bean来说, max-beans-in-cache同样可以首先采用默认值1000，监控实例缓存和钝化的情况,再做适当调整。<BR><BR>　　并行策略concurrency-strategy定义了实体Bean如何管理锁,有四种策略: Exclusive、Databse、ReadOnly、Optimistic。效率依次提高,可靠性依次降低,尽量避免使用互斥策略,如果Bean无需更新操作,使用只读策略,更甚的是,如果Bean的内容不会改变,可设置read-timeout-seconds为0,乐观并行策略时采用事务间缓存策略,在entity-cache描述符中将cache-between-transactions元素设为true。</FONT><A id=2_6_2 name=2_6_2></A><BR><BR><FONT size=4><B>2.6.2 优化事务隔离级别和事务属性</B><BR>　　对EJB组件来说，有四种事务隔离水平：</FONT></P>
<UL>
<LI><FONT size=4>TRANSACTION-SERIALIZABLE：在处理完成之前拒绝其他处理的读入、可扩展性或插入数据操作; </FONT>
<LI><FONT size=4>TRANSACTION-REPEATABLE-READ：防止处理修改正在被其他处理调用的数据; </FONT>
<LI><FONT size=4>TRANSACTOIN-READ-COMMITTED：防止对正在被其他处理修改的数据执行写锁定； </FONT>
<LI><FONT size=4>TRANSACTION-READ-UNCOMMITTED：允许处理读入未受权的数据以及允许在向结果中添加记录时可以忽略处理。 </FONT></LI></UL>
<P><FONT size=4>　　 以上隔离水平依次降低,效率和性能依次提高。因此,建议选用满足在业务数据完整性要求前提下水平最低的隔离级别。<BR><BR>　　对于事务属性的设置也是如此,对于删除、修改和插入操作设置为Required,而对于只读操作设置为Supports或者NotSupports。</FONT><A id=2_6_3 name=2_6_3></A><BR><BR><FONT size=4><B>2.6.3 其他一些小技巧</B><BR>　　1. 利用finders-load-bean的默认值true，既可以避免“n+1”的查询问题，又可以提高系统的性能;<BR>　　2. 使用delay-updates-until-end-of-tx参数的默认值true，除非应用程序对某些变化有特别的要求;<BR>　　3. 应用程序在每个业务方法调用后不需要进行存在性检查，将check-exists-on-method设定为false，以提高程序的性能;<BR>　　4. 同一应用内, 将enable-call-by-reference设置为 true;<BR>　　5. reentrant设置为false,避免事先加载子数据。</FONT><A id=3 name=3></A><BR><BR><B><FONT size=4>第三章 数据库调优</FONT><A id=3_1_1 name=3_1_1></A><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#0"><FONT size=4>(目录)</FONT></A><BR><FONT size=4>3.1.1 Oracle性能优化</FONT></B><BR><FONT size=4>　　Oracle9i的性能优化除了调整kernal之外就是主要对Oracle启动文件的调整,即调整SGA的参数。注意,不同操作系统不同位数的机器最优的参数不是一样的,这里主要有windows和unix之分,32位和64位之分。<BR>首先需要调大进程数和游标数,一般默认的值对实际应用来说都比较小,比如说,进程数可以调到300,游标数可以调到500。<BR><BR>　　其次,看一个经验公式: OS 使用内存+ SGA + session*(sort_area_size + hash_area_size +2M)&lt;0.7RAM,通常认为此时的SGA比较合理。这里sort_area_size为64k, hash_area_size为128k(当排序多的时候需要增大sort_area_size,按调整后的值计算),session表示最大并发进程数,假设100个。假如1G内存的机器,OS占用200M,PGA占用200M左右,那么SGA可以设为400-500M，如果2G内存可以1G给SGA，8G可以5G给SGA。不过对于32位数据库来说，通常最多只能使用1.7G内存。<BR><BR>　　然后，SGA内参数设置的基本原则是：data buffer 通常可以尽可能的大，shared_pool_size 要适度，log_buffer 通常大到几百K到1M就差不多。具体的：data buffer 1G内存可以设置500M，2G设为1.2G，8G可设为5G 。shared_pool_size不易过大，通常应该控制在200M--300M,如果使用了大量的存储过程，可以根据SGA的值增大到500M，如果增大后命中率得不到提高，则增加是无益的。具体的：1G内存可以设置100M，2G设为150M，8G可设为300M。如不使用Java，java_pool_size 10-20M即可。large_pool_size如果不设置MTS，在20M -30M 即可，假如设置 MTS,可以考虑为 session * (sort_area_size + 2M)。<BR><BR>　　最后，关于内存的设置可根据statspack信息和v$system_event,v$sysstat,v$sesstat,v$latch 等view信息来考虑微调。</FONT><A id=3_1_2 name=3_1_2></A><BR><BR><FONT size=4><B>3.1.2 Oracle的其他调整</B><BR>　　为了Oracle高效率的运行，除了上面提到的内存因素之外，还有就是需要良好的数据库设计：表、视图、索引和日志的合理规划和建立。I/O的性能也是重要因素，应尽量减少页交换和页分配。此外，就是改善检查点的效率。</FONT><A id=4 name=4></A><BR><BR><B><FONT size=4>第四章 操作系统调优</FONT><A id=4_1 name=4_1></A><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#0"><FONT size=4>(目录)</FONT></A><BR><FONT size=4>4.1 操作系统调整</FONT></B><BR><FONT size=4>　　操作系统影响应用程序运行性能的因素主要有：硬件的配置(CPU、内存、硬盘等),核心参数,TCP/IP参数以及补丁的情况等。这里对操作系统的优化,除了更新最新的补丁程序以保证应用程序正常运行之外,就是调整TCP/IP参数,文件描述符,对于个别操作系统还有其他特别的参数调整。下面将依次介绍不同操作系统的情况,更多的信息请参考各操作系统的文档。</FONT><A id=4_1_1 name=4_1_1></A><BR><BR><FONT size=4><B>4.1.1 HP-UX</B><BR>　　对于HP-UX,你首先需要安装Java Patch:<BR></FONT><A href="http://www.hp.com/products1/unix/java/patches/index.html" target=_blank><FONT size=4>http://www.hp.com/products1/unix/java/patches/index.html</FONT></A><FONT size=4>,然后需要确认下面文档中的核心参数是否满足(可以使用sam命令修改核心参数):</FONT><A href="http://e-docs.bea.com/platform/suppconfigs/configs81/hpux11_risc/81sp3.html#80105" target=_blank><FONT size=4>http://e-docs.bea.com/platform/suppconfigs/configs81/hpux11_risc/81sp3.html#80105</FONT></A><FONT size=4>。<BR><BR>　　调整TCP参数: ndd -set /dev/tcp tcp_conn_req_max 1024, 将侦听队列的最大允许长度调整到1024。 有时操作系统限制进程使用的最大内存数小于你要配置的内存大小,则需要调整该值。<BR><BR>　　读者可以从</FONT><A href="http://docs.hp.com/hpux/onlinedocs/TKP-90203/TKP-90203.html" target=_blank><FONT size=4>http://docs.hp.com/hpux/onlinedocs/TKP-90203/TKP-90203.html</FONT></A><FONT size=4>了解更多的HP-UX调整建议。</FONT><A id=4_1_2 name=4_1_2></A><BR><BR><FONT size=4><B>4.1.2 Solaris</B><BR>　　调整TCP的参数,等待时间间隔tcp-time-wait-interval建议设置为60000ms: /usr/sbin/ndd ?set /dev/tcp tcp_time_wait_interval 60000;<BR>其他参数调整如下:<BR><BR>tcp_xmit_hiwat/tcp_recv_hiwat 131072<BR>tcp_conn_req_max_q/tcp_conn_req_max_q0 16384<BR><BR>　　调整一个进程打开的文件描述符的数量:软限制和硬限制以及散列表的大小,修改/etc/system文件:<BR><BR>set tcp:tcp_conn_hash_size=32768<BR>set rlim_fd_cur=8192<BR>set rlim_fd_max=8192<BR><BR>更多的调整信息请查阅: </FONT><A href="http://docs.sun.com/db/doc/806-7009" target=_blank><FONT size=4>http://docs.sun.com/db/doc/806-7009</FONT></A><FONT size=4>(Solaris9)。</FONT><A id=4_1_3 name=4_1_3></A><BR><BR><FONT size=4><B>4.1.3 AIX</B><BR>　　AIX用no命令调整TCP参数，等待时间间隔tcp_timewait: no -o tcp_timewait=4,将tcp.timewait参数设置为4个15秒间隔，即1分钟。运行no -a命令将显示网络当前的所有属性值。由于UDP_SENDSPACE默认的缓存大小是8k,为减少I/O异常,需调整为32k:<BR><BR>　　no -o udp_sendspace=32768。此外, 当WebLogic HTTP请求忙时,可以调整侦听队列的最大长somaxconn到8192(默认值是1024)。<BR><BR>　　更多信息:</FONT><A href="http://publib16.boulder.ibmo.com/pseries/en-us/aixbman/prftungd/prftungd.htm" target=_blank><FONT size=4>http://publib16.boulder.ibmo.com/pseries/en-us/aixbman/prftungd/prftungd.htm</FONT></A><FONT size=4>。</FONT><A id=4_1_4 name=4_1_4></A><BR><BR><FONT size=4><B>4.1.4 Linux</B><BR>　　调整Linux系统使用sysctl命令修改TCP参数等待时间间隔:sysctl -w ip_ct_tcp_timeout_time_wait=60;调整打开文件的最大数:在/etc/sysctl.conf文件中，添加: Fs.file-max=65535,然后运行sysctl -p;调整打开文件描述符最大数为8192:在/etc/security/limits.conf文件，添加:WebLogic hard nofile 8192(仅针对WebLogic用户),然后在WebLogic启动文件里运行ulimit-n 8192激活设置。<BR><BR>更多信息请查阅:</FONT><A href="http://ipsysctl-tutorial.frozentux.net/ipsysctl-tutorial.html" target=_blank><FONT size=4>http://ipsysctl-tutorial.frozentux.net/ipsysctl-tutorial.html</FONT></A><FONT size=4>。</FONT><A id=4_1_5 name=4_1_5></A><BR><BR><FONT size=4><B>4.1.5 Windows</B><BR>　　Windows系统的调整通过修改注册表HKEY-LOCAL-MACHINESYSTEMCurrent ControlSetServices文件夹来完成。可以调整TcpipParameters子文件夹中的等待时间间隔时间TcpTimedWaitDelay参数的值。侦听队列最大长度的默认值为15，为修改它，可在InetinfoParameters子目录中创建DWORD条目ListenBackLog。<BR>此外,Windows2000的Service Pack(要求sp3以上)也会影响系统稳定性: </FONT><A href="http://e-docs.bea.com/platform/suppconfigs/configs81/win2ksvr_as_data_pentium/81sp3.html" target=_blank><FONT size=4>http://e-docs.bea.com/platform/suppconfigs/configs81/win2ksvr_as_data_pentium/81sp3.html</FONT></A><FONT size=4>。</FONT><A id=5 name=5></A><BR><BR><B><FONT size=4>第五章 性能监控和性能分析</FONT></B><A id=5_1 name=5_1></A><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#0"><FONT size=4>(目录)</FONT></A><BR><FONT size=4><B>5.1 性能瓶颈</B><BR>　　最后,介绍一下实际分析J2EE应用性能的常用命令和工具。对于实现一个高性能的J2EE应用来说,掌握了J2EE调优的理论经验还是不够的。掌握性能监控,发现瓶颈和问题诊断才是保证J2EE系统持续高效运行的关键。<BR>瓶颈指的是限值所有吞吐操作以及严重影响反应时间的系统内资源。在分布式系统内寻找并纠正瓶颈是非常困难的，需要有经验的团队来解决。瓶颈会发生在Web服务器上，程序代码中，应用服务器上，数据库，操作系统或者网络，硬件上。经验表明，瓶颈很容易发生在如下地方：数据库连接与队列中；应用服务器的程序代码中；应用服务器和Web服务器硬件上；网络和TCP配置中。实际中可以着力对这些环节进行监控。<BR><BR><B>5.2 操作系统监控</B><BR>　　操作系统层面的性能监控主要是对内存、CPU、I/O和交换区的使用情况进行监控分析。windows平台可以通过任务管理器和perfmon工具查看。如果是unix系统可以使用stat系列命令(vmstat, mpstat, iostat)监控内存、CPU和I/O的即时变化,使用swap命令查看交换区的使用情况。如果操作系统安装了top、topas、glance等使用工具,则使用top、topas、glance将能更为方便地看到WebLogic进程对操作系统的内存,CPU和I/O资源使用的即时变化情况。<BR><BR>　　而网络方面的性能可以通过ping和netstat等命令来监控,主要几个关键的网络统计值,如数据包再发送、重复数据包和数据包侦听丢失。<BR><BR>　　说明:本文提到的unix命令并非适用所有操作系统,仅供参考。</FONT><A id=5_3 name=5_3></A><BR><BR><FONT size=4><B>5.3 数据库监控</B><BR>　　数据库层面的监控这里为oracle9i为例来说明,可以采用oracle自带的工具Oracle <BR>Interprise Manager Console来监控session和sql的执行情况。还有其他专业的数据库监控工具可以使用,比如QUEST的spotlight(</FONT><A href="http://www.quest.com/spotlight-portal/" target=_blank><FONT size=4>http://www.quest.com/spotlight-portal/</FONT></A><FONT size=4>)可以非常形象和直观地对Oracle数据库的CPU、内存、I/O、Data Buffer Size、Shared Pool Size、Redo Buffer等参数进行即时监控,并自动对不正常的参数以红色显示。</FONT><A id=5_4 name=5_4></A><BR><BR><B><FONT size=4>5.4 WebLogic监控</FONT><A id=5_4_1 name=5_4_1></A><BR><FONT size=4>5.4.1 JVM监控</FONT></B><BR><FONT size=4>　　采用java参数-verbose:gc 来分析JVM的GC非常繁琐，而且不直观。使用-Xloggc:gc.log 参数将GC日志写入文件,采用GC 工具HPjtune (</FONT><A href="http://www.javaperformancetuning.com/tools/hpjtune/index.shtml" target=_blank><FONT size=4>http://www.javaperformancetuning.com/tools/hpjtune/index.shtml</FONT></A><FONT size=4>)进行分析,可以轻松看出当前jvm参数配置是否合理。<BR><BR>　　严格意义上来说HPjtune是一个分析工具,不是监控工具。这里不得不提及jRocket,Intel平台上最快的JVM, 在WebLogic启动命令中增加-Xmanagement参数,就可以执行beajrockit81sp3_142_04in下console命令监控WebLogic的内存使用和CPU负载情况。设置Tools/Preferences菜单中的Mode of operation属性为developer, jRocket将提供Method Profiler工具，她能够将所有在JRockit Java虚拟机上执行的成员方法的调用次数、执行的总时间和每次调用的执行时间都统计出来，进行代码级调优，这是jRockit的又一大优势。</FONT></P>
<P align=center><FONT size=4><IMG height=567 src="mhtml:file://C:\Documents and Settings\mage\桌面\blogjava\BEA WebLogic平台下J2EE调优攻略.mht!http://dev2dev.bea.com.cn/images/image2004111690.jpg" width=700></FONT></P>
<P><A id=5_4_2 name=5_4_2></A><BR><FONT size=4><B>5.4.2 Console监控</B><BR>　　WebLogic Console除了管理配置功能之外,提供了丰富的监控功能。通过WebLogic Console，首先我们可以查看服务器的运行情况。</FONT><A id=5_4_2_1 name=5_4_2_1></A><BR><BR><FONT size=4><B>5.4.2.1 Server监控</B><BR>　　通过使用服务器的Performance Monitoring选项卡，可以查看到请求吞吐量，执行队列积压情况以及JVM栈利用情况。而通过点击Performance Genaral选项卡中” Monitor all Active Queues...”可以查看所以执行线程的当前统计数据。此外Monitoring选项卡还可以监控JTA和JMS等Service的情况。</FONT></P>
<P align=center><FONT size=4><IMG height=636 src="mhtml:file://C:\Documents and Settings\mage\桌面\blogjava\BEA WebLogic平台下J2EE调优攻略.mht!http://dev2dev.bea.com.cn/images/image2004111691.jpg" width=674></FONT></P>
<P><A id=5_4_2_2 name=5_4_2_2></A><BR><FONT size=4><B>5.4.2.2 JDBC监控</B><BR>　　在连接池Monitoring选项卡中，WebLogic Console为每一个数据库连接池提供了实时统计信息。其中有三个重要参数可以反应WebLogic Server的健康状况：Connections High、Wait Second High和Waiters High。Connection High表示从服务器启动开始后到达池的最大连接数量，如果大于池的最大数量，则需要调整Maxium Capacity。Waiters High表示在没有可用连接的情况下，应用程序等待连接的最大个数。我们可以根据Waiters High的大小调整连接池容量。更多的参数可以通过Customize this view链接添加,参数含义参考:</FONT><A href="http://e-docs.bea.com/wls/docs81/ConsoleHelp/domain_jdbcconnectionpool_monitor.html#1104829" target=_blank><FONT size=4>http://e-docs.bea.com/wls/docs81/ConsoleHelp/domain_jdbcconnectionpool_monitor.html#1104829</FONT></A><FONT size=4>。</FONT><A id=5_4_2_3 name=5_4_2_3></A><BR><BR><FONT size=4><B>5.4.2.3 WEB监控</B><BR>　　Web Application Monitoring选项卡可以监控WEB应用的Session个数,以及Servlet的响应情况,激活Session Monitoring Enabled可以获取所有session的统计情况。更多信息请参考:<BR></FONT><A href="http://e-docs.bea.com/wls/docs81/ConsoleHelp/web_applications.html#1106723" target=_blank><FONT size=4>http://e-docs.bea.com/wls/docs81/ConsoleHelp/web_applications.html#1106723</FONT></A><FONT size=4>。</FONT><A id=5_4_2_4 name=5_4_2_4></A><BR><BR><FONT size=4><B>5.4.2.4 JMS监控</B><BR>　　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监控的详细情况可参见:</FONT><A href="http://edocs.bea.com/wls/docs81/ConsoleHelp/jms_monitor.html" target=_blank><FONT size=4>http://edocs.bea.com/wls/docs81/ConsoleHelp/jms_monitor.html</FONT></A><FONT size=4>。<BR><BR><B>5.4.2.5 EJB监控</B><BR>　　EJB监控包括对SLSB,SFSB,Entity Bean,MDB四种EJB的监控。本人认为EJB监控提供了非常丰富的运行时统计信息(</FONT><A href="http://e-docs.bea.com/wls/docs81/ConsoleHelp/ejb.html#1105036" target=_blank><FONT size=4>http://e-docs.bea.com/wls/docs81/ConsoleHelp/ejb.html#1105036</FONT></A><FONT size=4>),非常有利于我们对EJB进行性能调优。<BR><BR>　　SLSB选项卡为用户提供实例池的运行时统计信息。Pool Miss Ratio 表示实例池的Miss率,Pool Waiter Total Count 表示线程等待bean 实例的累计时间,Pool Timeout Total Count表示超时的线程数。当Pool Miss Ratio较大时,可以增加max-beans-free-pool。<BR><BR>　　SFSB可以关注Cache Miss Ratio和Activation Count。Cache Miss Ratio过大时,调大max-bean-in-cache未必有帮助,需要尝试不用的max-bean-in-cache以获得最低的Cache Miss Ratio。激活将严重减慢应用程序的速度,如果某一个bean的Activation Count的值过高，那么需要考虑增加max-bean-in-cache的大小。<BR>Entity Bean结合了SLSB的free pool和SFSB的cache。可以结合上面的策略进行监控。 <BR><BR>　　而MDB仅比SLSB多一个参数JMSConnection Alive,报告EJB是否成功连接到JMS目的地。<BR><BR>更多Console监控信息可参见</FONT><A href="http://edocs.bea.com/wls/docs81/ConsoleHelp/index.html" target=_blank><FONT size=4>http://edocs.bea.com/wls/docs81/ConsoleHelp/index.html</FONT></A><FONT size=4>。</FONT><A id=5_4_3 name=5_4_3></A><BR><BR><FONT size=4><B>5.4.3 实用工具分析</B><BR>　　WebLogic除了提供Console进行应用监控之外,用户还可以编写JMX程序或者通过SNMP协议进行监控。而QUEST Spotlight for WebLogic Server提供了类似WebLogic Console类似的监控功能,并对异常情况显红。<BR>这里不得不提到实战中经常用来分析性能瓶颈的工具THREAD DUMP,统一的命令是使用 weblogic.Admin 命令 THREAD_DUMP。而在 windows上还可以使用&lt;Ctrl&gt;+&lt;Break&gt; 来创建诊断问题所需的线程转储Thread Dump,而在unix上使用kill -3 &lt;wlspid&gt;命令。我们从中可以看到WebLogic后台线程的运行情况,通常需要每隔10秒左右持续执行几次以助诊断问题。更多信息可以参考BEA实战集锦。</FONT><A id=5_5 name=5_5></A><BR><BR><FONT size=4><B>5.5 应用程序分析</B><BR>　　应用程序分析除了凭借程序员丰富的经验和敏锐的洞察力去人工检查代码之外,使用厂家的工具也是节省时间的不错选择。目前市场上有Borland Optimizeit Enterprise Suite和QUEST Jprobe两个产品可以用来分析性能瓶颈,垃圾收集,内存泄漏,线程死锁和代码复盖等。Hpjmeter是一个免费的工具,也具有以上类似的性能分析功能。<BR><BR>　　而Borland Optimizeit Server Trace,HP OpenView Transaction Analyzer和Mercury LoadRunner J2EE breakdown都可以用来分解J2EE应用从客户端访问到最终数据库操作每一层次花费的时间,甚至精确到每一个方法的执行时间。Server Trace还具有检查内存泄漏，连接泄漏和错误警告等功能,一般在测试环境中使用。而HP OTVA的优势在于运行时监控,LoadRunner优势在于压力测试。</FONT><A id=6 name=6></A><BR><BR><B><FONT size=4>总结</FONT></B><A href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=16#0"><FONT size=4>(目录)</FONT></A><BR><FONT size=4>　　J2EE调优是一门实践和经验科学，是一个复杂而往复的过程。其原则是：合理。合理,看似简单,细细品味,意味深长。本文所述的调优策略并不是一成不变的，只是为了给大家一个参考建议，让大家少走弯路，关键是根据实际环境调优。欢迎有兴趣的朋友在论坛上积极讨论和批评指正。</FONT><A id=7 name=7></A></P><img src ="http://www.blogjava.net/xiaomage234/aggbug/5745.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaomage234/" target="_blank">小马歌</a> 2005-06-08 16:55 <a href="http://www.blogjava.net/xiaomage234/articles/5745.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>