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—>Perfformance对Throughput:、Queue Length、Memory 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 没有关闭。导致文件一直处于打开状态。造成资源的严重浪费。
修改之后的简单代码如下:
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 的值才行啊,
修改/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文件当添加以下的配置信息:
- <Context>
- <Resource name="jdbc/DSjwzhxt" auth="Container" type="javax.sql.DataSource"
- maxActive="20" maxIdel="10" maxWait="1000" username="qbuser"
- password="qbxt" driverClassName="oracle.jdbc.driver.OracleDriver"
- url="jdbc:oracle:thin:@192.168.1.3:1521:qbdb">
- </Resource>
- </Context>
其中:
name 表示指定的jndi名称
auth 表示认证方式,一般为Container
type 表示数据源床型,使用标准的javax.sql.DataSource
maxActive 表示连接池当中最大的数据库连接
maxIdle 表示最大的空闲连接数
maxWait 当池的数据库连接已经被占用的时候,最大等待时间
logAbandoned 表示被丢弃的数据库连接是否做记录,以便跟踪
username 表示数据库用户名
password 表示数据库用户的密码
driverClassName 表示JDBC DRIVER
url 表示数据库URL地址
注意,这里你配置的name值要和程序中使用的是一样的,比如按照这个例子,程序就应该是这样的
- private static String gENV = "java:comp/env/";
- Context ctx = new InitialContext();
- Context envContext = (Context)ctx.lookup(gENV);
- DataSource ds = (DataSource) envContext.lookup("jdbc/DSjwzhxt");
- 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节点
- <Context path="/bdbj" docBase="bdbj" reloadable="true" crossContext="true">
- <Resource name="jdbc/DSjwzhxt" auth="Container" type="javax.sql.DataSource" maxActive="10" maxIdle="30"
- maxWait="10000" username="stuser" password="****"
- driverClassName="oracle.jdbc.driver.OracleDriver"
- url="jdbc:oracle:thin:@192.168.1.11:1521:hyperic"/>
- </Context>
效果如下图