﻿<?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-落叶归根-文章分类-WebLogic</title><link>http://www.blogjava.net/allan-oy/category/7605.html</link><description>一个人首先要尊重别人，然后才能得到别人的尊重；一个人首先要对自己负责，然后才有资格去对别人负责。</description><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 12:07:52 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 12:07:52 GMT</pubDate><ttl>60</ttl><item><title>一种非常简单的性能优化方法 </title><link>http://www.blogjava.net/allan-oy/articles/34261.html</link><dc:creator>落叶归根</dc:creator><author>落叶归根</author><pubDate>Wed, 08 Mar 2006 06:08:00 GMT</pubDate><guid>http://www.blogjava.net/allan-oy/articles/34261.html</guid><wfw:comment>http://www.blogjava.net/allan-oy/comments/34261.html</wfw:comment><comments>http://www.blogjava.net/allan-oy/articles/34261.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/allan-oy/comments/commentRss/34261.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/allan-oy/services/trackbacks/34261.html</trackback:ping><description><![CDATA[<SPAN class=h2b>一种非常简单的性能优化方法</SPAN> 
<P>最近我在帮助一个客户对应用程序进行性能调优，该应用程序的CPU占用量高得不可思议。他们计划从另一种产品迁移到WebLogic Express上，但是令他们吃惊的是，WebLogic Express下的CPU占用量要远远高于他们原本使用的产品。</P>
<P>我们以优先级的顺序列出了各种性能调优参数，试图解决问题。列在上面的是我所认为的简单参数。对于这些参数，我们公认应该设一个特定的值为最大值，而不会造成任何可能的负面影响。头两个参数是pageCheckSeconds和servlet-reload-check-secs。它们的默认值是1，这表示WebLogic每一秒钟都针对每个JSP页面和servlet进行检查，看是否有新的版本。这在开发时是一个很好的设置，但是在生产中，如果系统有大量的JSP页面和servlet，这将会造成巨大的开销。</P>
<P>如果您的生产系统从来不动态更新JSP页面和servlet的话，这两个参数应该设置为 -1，这表示WebLogic从不检查新页面。如果您需要更改JSP页面和servlet的话，可以将这两个参数设置为一个比较大的数，比如180，以减少检查新版本对系统的影响。</P>
<P>将客户机应用程序的这两个参数设为 -1可以使CPU占用量减少一半。只需更改一下参数，就可以获得巨大的好处，的确是一种非常简单的性能优化方法。</P><img src ="http://www.blogjava.net/allan-oy/aggbug/34261.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/allan-oy/" target="_blank">落叶归根</a> 2006-03-08 14:08 <a href="http://www.blogjava.net/allan-oy/articles/34261.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Weblogic服务器性能调优 </title><link>http://www.blogjava.net/allan-oy/articles/34186.html</link><dc:creator>落叶归根</dc:creator><author>落叶归根</author><pubDate>Wed, 08 Mar 2006 01:41:00 GMT</pubDate><guid>http://www.blogjava.net/allan-oy/articles/34186.html</guid><wfw:comment>http://www.blogjava.net/allan-oy/comments/34186.html</wfw:comment><comments>http://www.blogjava.net/allan-oy/articles/34186.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/allan-oy/comments/commentRss/34186.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/allan-oy/services/trackbacks/34186.html</trackback:ping><description><![CDATA[注：在下面做的介绍都是以Weblogic8.1为例的，其它版本的Weblogic可能会有些许不同。<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1)&nbsp;设置JAVA参数；<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a)&nbsp;编辑Weblogic&nbsp;Server启动脚本文件；<BR><BR>l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BEA_HOME\user_projects\domains\domain-name\startWebLogic.cmd(startWebLogic.sh&nbsp;on&nbsp;Unix)<BR><BR>l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BEA_HOME\user_projects\domains\domain-name\startManagedWebLogic.cmd(startManagedWebLogic.sh&nbsp;on&nbsp;Unix)<BR><BR>b)&nbsp;编辑set&nbsp;JAVA_OPTIONS命令，如：set&nbsp;JAVA_OPTIONS=-Xms256m&nbsp;–Xmx256m；<BR><BR>c)&nbsp;保存，重启即可。<BR><BR>注：在WebLogic中，为了获得更好的性能，BEA公司推荐最小Java堆等于最大Java堆。<BR><BR>2)&nbsp;开发模式&nbsp;vs.&nbsp;产品模式；<BR><BR>开发模式和产品模式的一些参数的默认值不同，可能会对性能造成影响，下面是对性能有影响的参数列表：<BR><BR>参数<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR><BR>开发模式默认值<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR><BR>产品模式默认值<BR><BR>Execute&nbsp;Queue:&nbsp;Thread&nbsp;Count<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR><BR>15&nbsp;threads<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR><BR>25&nbsp;threads<BR><BR>JDBC&nbsp;Connection&nbsp;Pool:&nbsp;MaxCapacity<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR><BR>15&nbsp;connnections<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR><BR>25&nbsp;connections<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;通过启动管理控制台，在域（如：mydomain）&gt;&nbsp;配置&nbsp;&gt;&nbsp;常规选择产品模式。<BR><BR>3)&nbsp;尽量开启本地I/O；<BR><BR>通过启动管理控制台，在域（如：mydomain）&gt;&nbsp;服务器&nbsp;&gt;&nbsp;server实例（如：myserver）&gt;&nbsp;配置&nbsp;&gt;&nbsp;调整选择启用本地I/O。<BR><BR>注：此值也可通过手动的修改config.xml配置文件。<BR><BR>4)&nbsp;调优执行队列线程；<BR><BR>a)&nbsp;修改默认执行线程数<BR><BR>在这里，执行队列的线程数表示执行队列能够同时执行的操作的数量。但此值不是设的越大越好，应该恰到好处的去设置它，太小了，执行队列中将会积累很多待处理的任务，太大了，则会消耗大量的系统资源从而影响整体的性能。在产品模式下默认为25个执行线程。<BR><BR>为了设置理想的执行队列的线程数，我们可以启动管理控制台，在域（如：mydomain）&gt;&nbsp;服务器&nbsp;&gt;&nbsp;server实例（如：myserver）&gt;&nbsp;监视&nbsp;&gt;&nbsp;性能中监控最大负载时执行队列的吞吐量和队列中的等待请求数，据此确定理想的数值。<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;理想的默认执行线程数是由多方面的因素决定的，比如机器CPU性能、总体体系架构、I/O、操作系统的进程调度机制、JVM的线程调度机制。随着CPU个数的增加，WebLogic可以近乎线性地提高线程数。线程数越多，花费在线程切换的时间也就越多；线程数越小，CPU可能无法得到充分的利用。为获取一个理想的线程数，需要经过反复的测试。在测试中，可以以25*CPU个数为基准进行调整。当空闲线程较少，CPU利用率较低时，可以适当增加线程数的大小（每五个递增）。对于PC&nbsp;Server和Windows&nbsp;2000，则最好每个CPU小于50个线程，以CPU利用率为90%左右为最佳。<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;通过启动管理控制台，在域（如：mydomain）&gt;&nbsp;服务器&nbsp;&gt;&nbsp;server实例（如：myserver）&gt;&nbsp;Execute&nbsp;Queue&nbsp;&gt;&nbsp;weblogic.kernel.Defalt&nbsp;&gt;&nbsp;配置中修改线程计数。<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b)&nbsp;设定执行队列的溢出条件；<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Weblogic&nbsp;Server提供给默认的执行队列或用户自定义的执行队列自定义溢出条件的功能，当满足此溢出条件时，服务器改变其状态为“警告”状态，并且额外的再分配一些线程去处理在队列中的请求，而达到降低队列长度的目的。<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;通过启动管理控制台，在域（如：mydomain）&gt;&nbsp;服务器&nbsp;&gt;&nbsp;server实例（如：myserver）&gt;&nbsp;Execute&nbsp;Queue&nbsp;&gt;&nbsp;weblogic.kernel.Defalt&nbsp;&gt;&nbsp;配置下面几项：<BR><BR>l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;队列长度：此值表示执行队列中可容纳的最大请求数，默认值是65536，最后不要手动改变此值。<BR><BR>l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;队列长度阈值百分比：此值表示溢出条件，在此服务器指出队列溢出之前可以达到的队列长度大小的百分比。<BR><BR>l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;线程数增加：当检测到溢出条件时，将增加到执行队列中的线程数量。如果CPU和内存不是足够的高，尽量不要改变默认值“0”。因为Weblogic一旦增加后不会自动缩减，虽然最终可能确实起到了降低请求的作用，但在将来的运行中将影响程序的性能。<BR><BR>l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;最大线程数：为了防止创建过多的线程数量，可以通过设定最大的线程数进行控制。<BR><BR>在实际的应用场景中，应根据具体情况适当的调整以上参数。<BR><BR>c)&nbsp;设定执行队列监测行为<BR><BR>Weblogic&nbsp;Server能够自动监测到当一个执行线程变为“阻塞”。变为“阻塞”状态的执行线程将无法完成当前的工作，也无法再执行新请求。如果执行队列中的所有执行线程都变为“阻塞”状态，Weblogic&nbsp;server可能改变状态为“警告”或“严重”状态。如果Weblogic&nbsp;server变为“严重”状态，可以通过Node&nbsp;Manager来自动关闭此服务器并重新启动它。具体请参考：Node&nbsp;Manager&nbsp;Capabilities文档。<BR><BR>通过启动管理控制台，在域（如：mydomain）&gt;&nbsp;服务器&nbsp;&gt;&nbsp;server实例（如：myserver）&gt;配置&nbsp;&gt;&nbsp;调整下可配置下面几项：<BR><BR>l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;阻塞线程最长时间：在此服务器将线程诊断为阻塞线程之前，线程必须连续工作的时间长度(秒)。默认情况下，WebLogic&nbsp;Server&nbsp;认为线程在连续工作&nbsp;600&nbsp;秒后成为阻塞线程。<BR><BR>l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;阻塞线程计时器间隔：WebLogic&nbsp;Server&nbsp;定期扫描线程以查看它们是否已经连续工作了&nbsp;"阻塞线程最长时间"&nbsp;字段中指定的时间长度的间隔时间(秒)。默认情况下，WebLogic&nbsp;Server&nbsp;将此时间间隔设置为&nbsp;600&nbsp;秒。<BR><BR>5)&nbsp;调优TCP连接缓存数；<BR><BR>WebLogic&nbsp;Server用Accept&nbsp;Backlog参数规定服务器向操作系统请求的队列大小，默认值为50。当系统重载负荷时,这个值可能过小,日志中报Connection&nbsp;Refused,导致有效连接请求遭到拒绝,此时可以提高Accept&nbsp;Backlog&nbsp;25%直到连接拒绝错误消失。对于Portal类型的应用,默认值往往是不够的。Login&nbsp;Timeout和SSL&nbsp;Login&nbsp;Timeout参数表示普通连接和SSL连接的超时时间,如果客户连接被服务器中断或者SSL容量大,可以尝试增加该值。<BR><BR>通过启动管理控制台，在域（如：mydomain）&gt;&nbsp;服务器&nbsp;&gt;&nbsp;server实例（如：myserver）&gt;配置&nbsp;&gt;&nbsp;调整下可配置“接受预备连接”。<BR><BR>6)&nbsp;改变Java编译器；<BR><BR>标准的Java编译器是javac，但编译JSP&nbsp;servlets速度太慢，为了提高编译速度，可以使用sj或jikes编译器取代javac编译器。下面说说更改Java编译器：<BR><BR>通过启动管理控制台，在域（如：mydomain）&gt;&nbsp;服务器&nbsp;&gt;&nbsp;server实例（如：myserver）&gt;配置&nbsp;&gt;&nbsp;常规下改变Java&nbsp;编译器，默认为javac。输入完整路径，如：c:\visualcafe31\bin\sj.exe。然后打开高级选项，在预规划到类路径填写编译&nbsp;Java&nbsp;代码时为&nbsp;Java&nbsp;编译器类路径预规划的选项，如：BEA_HOME\jdk141_02\jre\lib\rt.jar。<BR><BR>7)&nbsp;使用Webogic&nbsp;Server集群提高性能；<BR><BR>具体关于如何配置Weblogic集群，我就不细说了。详情可参考：Introduction&nbsp;to&nbsp;WebLogic&nbsp;Server&nbsp;Clustering。<BR><BR>8)&nbsp;Weblogic&nbsp;EJB调优<BR><BR>由于EJB2.0已经很少项目在用了，EJB3.0再成熟一点，我再补充这一部分吧！<BR><BR>9)&nbsp;JDBC应用调优<BR><BR>JDBC&nbsp;Connection&nbsp;Pool的调优受制于WebLogic&nbsp;Server线程数的设置和数据库进程数,游标的大小。通常我们在一个线程中使用一个连接,所以连接数并不是越多越好,为避免两边的资源消耗，建议设置连接池的最大值等于或者略小于线程数。同时为了减少新建连接的开销,将最小值和最大值设为一致。<BR><BR>增加Statement&nbsp;Cache&nbsp;Size对于大量使用PreparedStatement对象的应用程序很有帮助,WebLogic能够为每一个连接缓存这些对象,此值默认为10。在保证数据库游标大小足够的前提下,可以根据需要提高Statement&nbsp;Cache&nbsp;Size。比如当你设置连接数为25,Cache&nbsp;Size为10时,数据库可能需要打开25*10=250个游标。不幸的是,当遇到与PreparedStatement&nbsp;Cache有关的应用程序错误时,你需要将Cache&nbsp;Size设置为0。<BR><BR>尽管JDBC&nbsp;Connection&nbsp;Pool提供了很多高级参数,在开发模式下比较有用,但大部分在生产环境下不需调整。这里建议最好不要设置测试表,&nbsp;同时Test&nbsp;Reserved&nbsp;Connections和Test&nbsp;Released&nbsp;Connections也无需勾上。&nbsp;当然如果你的数据库不稳定,时断时续,你就可能需要上述的参数打开。<BR><BR>最后提一下驱动程序类型的选择,以Oracle为例,Oracle提供thin驱动和oci驱动,从性能上来讲,oci驱动强于thin驱动,特别是大数据量的操作。但在简单的数据库操作中,性能相差不大,随着thin驱动的不断改进,这一弱势将得到弥补。而thin驱动的移植性明显强于oci驱动。所以在通常情况下建议使用thin驱动。而最新驱动器由于WebLogic&nbsp;server/bin目录下的类包可能不是最新的,请以Oracle网站为准:&nbsp;<A href="http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/htdocs/jdbc9201.html" target=_blank>http://www.oracle.com/technology/software ... jdbc/htdocs/jdbc9201.html</A>。<BR><BR>10)&nbsp;JSP调优<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设置jsp-param&nbsp;pageCheckSeconds=-1；<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设置serlet-reload-check=-1或ServletReloadCheckSecs=-1；<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设置jsp-param&nbsp;precompile=true，关闭JSP预编译选项。<BR><BR>转载：<A href="http://www.mikecat.net/blogview.asp?logID=1489">http://www.mikecat.net/blogview.asp?logID=1489</A><img src ="http://www.blogjava.net/allan-oy/aggbug/34186.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/allan-oy/" target="_blank">落叶归根</a> 2006-03-08 09:41 <a href="http://www.blogjava.net/allan-oy/articles/34186.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>配置多个服务处理</title><link>http://www.blogjava.net/allan-oy/articles/31591.html</link><dc:creator>落叶归根</dc:creator><author>落叶归根</author><pubDate>Mon, 20 Feb 2006 01:50:00 GMT</pubDate><guid>http://www.blogjava.net/allan-oy/articles/31591.html</guid><wfw:comment>http://www.blogjava.net/allan-oy/comments/31591.html</wfw:comment><comments>http://www.blogjava.net/allan-oy/articles/31591.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/allan-oy/comments/commentRss/31591.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/allan-oy/services/trackbacks/31591.html</trackback:ping><description><![CDATA[<SPAN class=postbody>I was having a trouble starting webserver using StartManagedWebLogic.sh command. I see "weblogic.nodemanager.NodeManagerException: [[NodeManager:300034]Could not execute command getState for server PIA using the node manager. Reason: SecureCommandInvoker: Could not create a socket to the NodeManager running on host 'localhost:5555' to execute command 'getState PIA', reason: Connection refused. Ensure that the NodeManager on host 'localhost' is configured to listen on port '5555' and that it is actively listening.]" <BR><BR>When I start using the console (start this server from control page), I get "SecureCommandInvoker: Could not create a socket to the NodeManager running on host 'localhost:5555' to execute command 'online PIA', reason: Connection refused. Ensure that the NodeManager on host 'localhost' is configured to listen on port '5555' and that it is actively listening" <BR><BR><SPAN style="FONT-WEIGHT: bold">Solution 1:</SPAN> <BR><BR>To make a managed server start, we need to start the node manager on that machine. You can find the script to start the server in WLS_HOME\server\bin\startNodeManager.cmd or sh. <BR><BR>The order in which we need to start the servers are <BR>1.Start the node manager <BR>2.Start the Admin server <BR>3.Start the specific managed server we need to start. <BR><BR><SPAN style="FONT-WEIGHT: bold">Solution 2:</SPAN> <BR><BR>Have you set up a "Machine" for each of the managed servers ? <BR><BR>You need to do that (extremely simple: Machines --&gt; Config. New (Unix) Machine ), and then under your new machine, configure the listen address under Nodemanager Tab, with the IP of the machine running the ManagedServer. <BR><BR>The problem seems to be with the adress which the N.M. listens: <BR>if you telnet localhost 5555, you'll get nothing ("conn refused"), but if you telnet X.X.X.X 5555, you'll get the prompt for the NM ( "Escape character is ]" ) <BR><BR>So, if you dont configure the managed server to speak with the nodemanager via real ip address instead of localhost (127.0.0.1), you get nothing.</SPAN><img src ="http://www.blogjava.net/allan-oy/aggbug/31591.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/allan-oy/" target="_blank">落叶归根</a> 2006-02-20 09:50 <a href="http://www.blogjava.net/allan-oy/articles/31591.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>