weblogic线程数修改,tomcat,http_load,jprofiler,压力测试jmeter;java.net.SocketException: Too many open files

http://flyash.itcao.com/post_556.html

之前使用了apache的ab和webbench,都各有特点,只是测试自己的vps时200个并发时返回成功的很少,同时访问网站是可以打开的,觉得可能是不是自己系统这里网络链接造成的,又找找其它的测试工具,看到了这个http_load,下载安装

wget http://www.acme.com/software/http_load/http_load-12mar2006.tar.gz
tar -zxvf http_load-12mar2006.tar.tar
cd http_load-12mar2006
mkdir -p /usr/local/man/man1
make && make install
http_load -p 100 -s 60 urllist

默认的安装目录在/usr/local/man/man1,需先建立,否则安装时报错,或者自己编辑Makefile文件,修改安装目录

同时建立urllist文件,包含需要测试url列表,一行一个,务必不要包含空行,否则执行时报unknow protocol -错误

参数p设置并发连接数,s设置连接时间

可以参考官方的例子
http://www.acme.com/software/http_load/

 

http://www.cnblogs.com/aiwa/archive/2011/09/15/2177577.html

第一次性能测试---http_load

 

 

http_load以并行复用的方式运行,用以测试webx服务器的吞吐量与负载。但是它不同于大多数压力测试工具,它可以以一个单一的进程运行,一般不会把客户机高斯,还可以测试https类的网站请求。

 

http_load用法:

 

usage:  ./http_load [-checksum] [-throttle] [-proxy host:port] [-verbose] [-timeout secs] [-sip sip_file]

 

            -parallel N | -rate N [-jitter]

 

            -fetches N | -seconds N

 

            -cmd get(|post)

 

            url_file

 

One start specifier, either -parallel or -rate, is required.

 

One start specifier, either -cmd get or -cmd post, is required.

 

One end specifier, either -fetches or -seconds, is required.

 

注:

 

常用方式:./http_load –r 200 –s 900 http.txt 2>2.log 1>1.txt

 

模拟qps200,连续压测15分钟,错误日志输出到2.log文件中,最终的压测结果输出到1.txt文件中。

 

结果分析:

 

1. 10799998 fetches, 1020 max parallel, 3.17224e+10 bytes, in 43200 seconds//说明测试中运行了10799998个请求,最大的并发进程数是1020,总计传输的数据是3.17224e+10 bytes,运行的时间是432000秒

 

2. 2937.26 mean bytes/connection//说明每一连接平均传输的数据量是(3.17224e+10)/10799998=2937.26

 

3. 250 fetches/sec, 734315 bytes/sec//说明每秒的响应请求为250,每秒传递的数据为734315 bytes

 

4. msecs/connect: 0.194116 mean, 30.207 max, 0.125 min//说明每链接的平均响应时间是0.194116 msecs,最大的响应时间是30.207msecs,最小的响应时间是0.125 msecs

 

5. msecs/first-response: 22.9355 mean, 59996.9 max, 0.07 min//说明每个请求的平均响应时间是22.9355msecs,最大的响应时间是30.207msecs,最小的响应时间是0.07msecs。

 

6. 23088 timeouts//运行中有23088个请求超时

 

7. 27503 bad byte counts//同一个http请求,不一样的结果的个数。

 

8. HTTP response codes://说明打开响应页面的类型,如果403的类型过多,那可能要注意是否系统遇到了瓶颈。

 

  code 200 – 10772495

 

 

 

这里主要看的参数有fetches/sec,msecs/first-response。要统计timeout的比例:timeouts/ fetches。这里的超时比例就是:23088/10799998=0.213%。

 

同时还要服务器端的cpu,mem和load。通常load数/cpu个数<=1是比较好的。

 

 

 

关于超时:http_load默认的超时时间为10s,这里的超时可以自己定义,但必须是int整数,不能是浮点数。

 

 

 

关于每秒种的请求数-r,如果pd有给期望的pv或uv,那么可大概算出qps,一般

 

qps=pv/(60×60×6)一般,每天按照6个小时算。如果没有期望值和参考值,那么就要去一个个试,看r为多少时,系统的性能达到最大值,要试出一个临界值。

 

注:r就代表qps,即结果中的参数fetches/sec值。如果r太大时,系统可能会压挂或者不稳定,此时qps跟r的差别较大,压测结果不具备参考性,要适当降低r值。

=======================================================

http://bbs.csdn.net/topics/340199550

官方文档指出,WebLogic 9 / WebLogic 10 的线程池是自调优的,并且在WebLogic 9的时候,通过修改config.xml可以修改默认线程池的最小值、最大值,但是很麻烦。到了WebLogic 10gR3,连修改config.xml的办法都给取消了。

 

但是,可以通过在启动脚本增加如下参数,可以指定默认线程池的最小值、最大值:

-Dweblogic.threadpool.MinPoolSize=100

-Dweblogic.threadpool.MaxPoolSize=500

http://www.blogjava.net/lhbjava/archive/2008/09/05/227111.html

 

Ø         更改内存分配参数(以内存为2G为例)

bea"weblogic81"common"bin"commENV.cmd文件中

set MEM_ARGS=-Xms128m -Xmx256m内存加大,设置为:

set MEM_ARGS=-Xms1024m –Xms1024m

然后在服务的startWeblogic.cmd中查找

call "%WL_HOME%"common"bin"commEnv.cmd",如果在这句的后面无内存参数的设置则以上面的设置为准。如果在这句的后面加上

set MEM_ARGS=-Xms1024m –Xms1024m,则以这句为准。

    Ø        适当调整了BEA Weblogic的线程数大小

weblogic server的线程数是一个比较重要的参数。线程数指的是weblogic server的最大并发处理操作数量。但是并不是说增加线程数就以为着能够增加性能,能够处理更多的事情。因为线程耗费资源,不必要的线程数增加反而会降低性能。

调整线程数时,在左边菜单的myserver上点击右键,选择查看执行队列,然后点击weblogic.kernel.Default。将线程计数最大线程数最小线程数设置为相同的数值,线程数增加设为0,以减少线程数增减带来的性能消耗。

Ø         Weblogic监控

http://ip:端口/console,输入用户名、密码对当前的服务进行监控。

登陆后会看到平台的左边有一树目录,打开mydomain下的servers,就会看到我们要监控的服务了。单击服务,

通过Monitoring—>General—> Monitor all Active Queues对线程进行监控制。

通过Monitoring—>PerfformanceThroughput:Queue LengthMemory Usage:进行监控。

http://blog.csdn.net/fengbaoxp/article/details/4663599

 

 

   我们的应用在tomcat上一直运行正常,移植到weblogic9上,同样的应用会因为获取不到数据库连接的错误而崩溃,经同事研究发现原因是weblogic9默认配置提供的可用连接数太少(4)所致,可是weblogic9控制台又没有提供修改链接数的功能,经多方请教,最后找到解决方法如下:

1、修改weblogic domain的config.xml文件,在对应位置加入红色标注的两行内容:

    <server>
          <name>admserver</name>
          <self-tuning-thread-pool-size-min>5</self-tuning-thread-pool-size-min>
          <self-tuning-thread-pool-size-max>15</self-tuning-thread-pool-size-max>
 
          ...
     </server>

2、在startweblogic.cmd脚本中加入一下java启动参数:

     -Dweblogic.configuration.schemaValidationEnabled=false

 

经测试32为windows操作系统上,同样硬件条件下:weblogic9支持的最大线程数约为2900个,而tomcat6支持最大线程数约为1100多。

 ==========================================================

http://hi.baidu.com/zekbtmzzpqbkqud/item/42be4f49f99b6897823ae12c

JProfiler 5.1.2破解安装与使用

 

安装

因为我在网上找不到5.1.2的版本,找到了JProfiler5.1.4,

下载地址:http://download.ej-technologies.com/jprofiler/jprofiler_windows_5_1_4.zip,为绿色版,解压后即可

破解文件:JProfilter.512crack.zip 下载地址:http://dl.javaeye.com/topics/download/a7f22508-bdce-38a1-91ab-37da1687e621

如果没有请到此处下载http://luanma.javaeye.com/blog/183827

注 册 方 法: 
1、解压缩到[targetdir]/bin目录下,其中要覆盖两个文件夹。 
2、在命令行模式下执行命令: “java -cp . Keygen” 就能获取到注册码。

使用方法网上比较多,可以参考以下地址:

JProfiler学习笔记 http://www.picai8.com/tech/article/100210.html

=============================================================

http://www.cnitblog.com/rd416/archive/2008/08/07/47724.aspx

linux 上tomcat 服务器抛出socket异常“文件打开太多”的问题 
java.net.SocketException: Too many open files
at java.net.PlainSocketImpl.socketAccept(Native Method)
at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:384)
at java.net.ServerSocket.implAccept(ServerSocket.java:450)
at java.net.ServerSocket.accept(ServerSocket.java:421)
at org.apache.tomcat.util.net.DefaultServerSocketFactory.acceptSocket(DefaultServerSocketFactory.java:60)
at org.apache.tomcat.util.net.PoolTcpEndpoint.acceptSocket(PoolTcpEndpoint.java:407)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:70)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)

原本以为是tomcat的配置或是应用本身的问题,"谷歌"一把后才发现,该问题的根本原因是由于系统文件资源的限制导致的。

具体可以参考http://www.bea.com.cn/support_pattern/Too_Many_Open_Files_Pattern.html
的说明。具体的解决方式可以参考一下:
1。ulimit -a 查看系统目前资源限制的设定。
   [root@test security]# umlimit -a 
-bash: umlimit: command not found
[root@test security]# ulimit -a
core file size        (blocks, -c) 0
data seg size         (kbytes, -d) unlimited
file size             (blocks, -f) unlimited
max locked memory     (kbytes, -l) unlimited
max memory size       (kbytes, -m) unlimited
open files                    (-n) 1024
pipe size          (512 bytes, -p) 8
stack size            (kbytes, -s) 8192
cpu time             (seconds, -t) unlimited
max user processes            (-u) 7168
virtual memory        (kbytes, -v) unlimited
[root@test security]# 
通过以上命令,我们可以看到open files 的最大数为1024
那么我们可以通过一下命令修改该参数的最大值

2. ulimit -n 4096
[root@test security]# ulimit -n 4096
[root@test security]# ulimit -a
core file size        (blocks, -c) 0
data seg size         (kbytes, -d) unlimited
file size             (blocks, -f) unlimited
max locked memory     (kbytes, -l) unlimited
max memory size       (kbytes, -m) unlimited
open files                    (-n) 4096
pipe size          (512 bytes, -p) 8
stack size            (kbytes, -s) 8192
cpu time             (seconds, -t) unlimited
max user processes            (-u) 7168
virtual memory        (kbytes, -v) unlimited

这样我们就修改了系统在同一时间打开文件资源的最大数,基本解决以上问题。

以上部分是查找网络上的解决方法。设置了之后段时间内有作用。

 

后来仔细想来,问题还是要从根本上解决,于是把以前的代码由认真地看了一遍。终于找到了,罪魁祸首。

在读取文件时,有一些使用的BufferedReader 没有关闭。导致文件一直处于打开状态。造成资源的严重浪费。

修改之后的简单代码如下:

 

public void test(){
    BufferedReader reader 
=null;
    
try{
        reader 
= 读取文件;
        String line 
= "";
        
while( ( ine=reader.readLine())!=null){
           其他操作
        }

    } 
catch (IOException e){
        System.out.println(e);
    } 
finally{  
         
if(reader !=null){
                
try {
                    reader.close();
                } 
catch (IOException e) {
                      e.printStackTrace();
                }
          }
    }

}

 

 

 

 

以上只是我的个人见解,希望对大家有所帮助。

 

http://zxs19861202.iteye.com/blog/423174

最近随着网站访问量的提高把web服务器移到linux下了,在移服务器的第二天,tomcat频繁的报

 

java.net.SocketException: Too many open files错误,错误日志达到了100多兆,郁闷了,windows上运行了很长

 

时间都没出现这个错误,后来才知道linux对进程的打开文件数是有限制的。

 

用命令ulimit -a查看

[root@test security]# ulimit -a 
core file size        (blocks, -c) 0 
data seg size         (kbytes, -d) unlimited 
file size             (blocks, -f) unlimited 
max locked memory     (kbytes, -l) unlimited 
max memory size       (kbytes, -m) unlimited 
open files                    (-n) 1024 
pipe size          (512 bytes, -p) 8 
stack size            (kbytes, -s) 8192 
cpu time             (seconds, -t) unlimited 
max user processes            (-u) 7168 
virtual memory        (kbytes, -v) unlimited 
[root@test security]# 
通过以上命令,我们可以看到open files 的最大数为1024

 

对于并发量比较大的网站这个限制是有些捉襟见肘的,所以我通过这个命令

 

ulimit -n 4096 
把打开文件数的上限设为了4096,这下好了,项目又稳定了

 

没想到过两天后又重新出这个错误了,郁闷,两个小时报一次,报之后就挂掉了

 

在重新用ulimit -a查看,发现open files    (-n) 1024 又变回了1024了,

 

报这个错误就在我那次登陆更新之后又报的,原来ulimit -n 4096 命令只能临时的改变open files  的值,当

 

 

重新登陆后又会恢复,所以需要永久设置open files  的值才行啊,

 

 

用ulimit -n 修改open files 总是不能保持。所以用下面一个简单的办法更好些。

修改/etc/security/limits.conf 添加如下一行:

* - nofile 1006154

修改/etc/pam.d/login添加如下一行

session required /lib/security/pam_limits.so

 

这次永久修改后程序就再没那个问题了,一直稳定运行。

 

另外遇到这个问题这后还需要检查我们的程序对于操作io的流是否在操作完之后关闭,这才是从最更本上的解决。

 

http://xiaoxinshome.iteye.com/blog/616965

本文基于tomcat6.0.20版本

1.context.xml方式

 

在我们的WebRoot目录下,就是和WEB-INF同级的目录下,新建一个META-INF的目录(假如不存在),在该目录下创建一个context.xml文件,并且在context.xml文件当添加以下的配置信息:

Xml代码  收藏代码
  1. <Context>  
  2.     <Resource name="jdbc/DSjwzhxt" auth="Container" type="javax.sql.DataSource"  
  3.         maxActive="20" maxIdel="10" maxWait="1000" username="qbuser"  
  4.         password="qbxt" driverClassName="oracle.jdbc.driver.OracleDriver"  
  5.         url="jdbc:oracle:thin:@192.168.1.3:1521:qbdb">  
  6.     </Resource>  
  7. </Context>  

 其中:
name 表示指定的jndi名称
auth 表示认证方式,一般为Container
type 表示数据源床型,使用标准的javax.sql.DataSource
maxActive 表示连接池当中最大的数据库连接
maxIdle 表示最大的空闲连接数
maxWait 当池的数据库连接已经被占用的时候,最大等待时间
logAbandoned 表示被丢弃的数据库连接是否做记录,以便跟踪
username 表示数据库用户名
password 表示数据库用户的密码
driverClassName 表示JDBC DRIVER
url 表示数据库URL地址

 

注意,这里你配置的name值要和程序中使用的是一样的,比如按照这个例子,程序就应该是这样的

Java代码  收藏代码
  1. private static String gENV = "java:comp/env/";  
  2. Context ctx = new InitialContext();  
  3.       Context envContext = (Context)ctx.lookup(gENV);  
  4.       DataSource ds = (DataSource) envContext.lookup("jdbc/DSjwzhxt");  
  5.       Connection conn = ds.getConnection();  

 

这种配置方式,tomcat启动的时候会在tomcat-6.0.20\conf\Catalina\localhost下自动建立一个和应用同名的xml文件,内容和context.xml是一样的。

 

其实可以不用context.xml,直接在tomcat-6.0.20\conf\Catalina\localhost下建立一个和应用同名的xml文件,然后里面的内容和context.xml一样也行。

 

2.在server.xml文件中配置数据源

在host节点内添加context节点

Java代码  收藏代码
  1. <Context path="/bdbj" docBase="bdbj" reloadable="true" crossContext="true">  
  2.         <Resource name="jdbc/DSjwzhxt" auth="Container" type="javax.sql.DataSource" maxActive="10" maxIdle="30"  
  3.                 maxWait="10000" username="stuser" password="****"  
  4.                     driverClassName="oracle.jdbc.driver.OracleDriver"  
  5.         url="jdbc:oracle:thin:@192.168.1.11:1521:hyperic"/>  
  6. </Context>  

 效果如下图

 

 

 

posted @ 2012-12-18 19:17  陳聽溪  阅读(1394)  评论(0)    收藏  举报