引自:http://itfeng.blog.techweb.com.cn/archives/2007/2007101315013.shtml
近期一直烦与WEB服务器的性能问题,常常www.fqf.cn网站出现内存溢出而导致web服务器停止的现象,对于一个商业网上来说,是个急需要解决的问题。
这两天采用了国外一个不过的内存溢出检测软件,对网站进行测试,发现网站启动开始占用内存就飘升,3分钟内几乎能达到60M(蓝色曲线,红色代表服务器提供给web使用的内存空间JVM),

解决办法中,首先想到就是检查程序本身是否存在某些代码没有释放资源,修改代码,处理常见的资源释放后,情况有所好转,启动的一段时间内能保持20M占用,但是时间长了,尤其白天人数多的时候,占用率也是节节上升,当突破64M(红色线)时,系统就报内存溢出,web服务器停止。
查询了Rexin的运行情况,发觉是分配内存不会在继续增加:
resin-status
Server: | |
Config: | D:\resin\conf\resin.conf |
Server Start: | Fri, 24 Nov 2006 13:42:51 +0800 (CST) |
Server Reload: | Fri, 24 Nov 2006 13:42:54 +0800 (CST) |
Total Memory: | 65.47Meg |
Free Memory: | 8.44Meg |
Invocation Hit Ratio: | 40.38% (4258/10543) |
Proxy Cache Hit Ratio: | 0.00% (0/22) |
Threads Config
Active Idle Total thread-max spare-thread-min
2 | 32 | 34 | 128 | 25 |
这样一来,修改代码不能根本解决问题,因为人数多的时候,的确需要一定量的内存空间。所以接着考虑如何提升JVM内存空间问题,按照文章的说法,在Resin目录的bin/httpd.sh文件,修改启动选项,对args=""修改为args="-Xms512M -Xmx1526M" 无论在本机试还是在服务器试,均无效,最后多次尝试,找到启动办法,就是在将resin加入系统服务的时候,同时加入参数,代替将参数写入启动文件中: httpd.exe -install -Xms512M -Xmx1526M 。本地测试可行,到web服务器却失败,奇怪中找了另外一台服务器做测试,发觉可行,启动后能分配522M内存:
resin-status
Server: | |
Config: | D:\resin\conf\resin.conf |
Server Start: | Fri, 24 Nov 2006 11:10:19 +0800 (CST) |
Server Reload: | Fri, 24 Nov 2006 11:10:19 +0800 (CST) |
Total Memory: | 532.80Meg |
Free Memory: | 499.62Meg |
Invocation Hit Ratio: | 91.66% (154/168) |
Proxy Cache Hit Ratio: | 0.00% (0/2) |
Threads Config
Active Idle Total thread-max spare-thread-min
11 | 29 | 40 | 128 | 25 |
仔细分析一下,发觉web服务器在分配内存时报错,是服务器自身不足512M空闲内容分配给Resin(具体原因不清楚,估计是Oracle数据库同时在用,所以能用的资源不多了),于是改为初始佩服64M,最大为512M:
resin-status
Server: | |
Config: | D:\resin\conf\resin.conf |
Server Start: | Fri, 24 Nov 2006 13:42:51 +0800 (CST) |
Server Reload: | Fri, 24 Nov 2006 13:42:54 +0800 (CST) |
Total Memory: | 122.11Meg |
Free Memory: | 20.23Meg |
Invocation Hit Ratio: | 42.19% (39812/94356) |
Proxy Cache Hit Ratio: | 0.00% (0/22) |
Threads Config
Active Idle Total thread-max spare-thread-min
23 | 29 | 52 | 128 | 25 |
内存分配问题终于解决,由表格可以看到,系统能分配给JVM的内存一百多M左右而已,不过这个数能让服务器安全的运行了一天,庆幸庆幸进一步解决。
另外,学网上例子,测试了服务器的页面连接处理情况:
public static void main(String[] args) {
test test = new test();
try {
long a = System.currentTimeMillis();
System.out.println("Starting request url:");
for (int i = 0; i < 10000; i++) {
java.net.URL url = new java.net.URL("http://www.fqf.cn:8088/list.jsp");
InputStream is = url.openStream();
is.close();
System.out.println("Starting request url:" + i);
}
System.out.println("request url end.take " +
(System.currentTimeMillis() - a) + "ms");
}catch(Exception e){
e.printStackTrace();
}
}
发觉,开始请求的时候很快,达到一百多的时候,显然变得慢起来,按照文章说明,是由于线程(并发数)的问题,检查了resin的配置文件,发现线程(后来才知道是并发数)默认是128,改为10240如:
<keepalive-max>10240</keepalive-max>
启动后,看到resin状态,启动测试程序到500多的时,页面开始响应变慢,到此为止,至少提升了并发数方面。
resin-status
Server: | |
Config: | D:\resin\conf\resin.conf |
Server Start: | Fri, 24 Nov 2006 11:51:39 +0800 (CST) |
Server Reload: | Fri, 24 Nov 2006 11:51:40 +0800 (CST) |
Total Memory: | 231.47Meg |
Free Memory: | 71.74Meg |
Invocation Hit Ratio: | 99.66% (1197/1201) |
Proxy Cache Hit Ratio: | 0.00% (0/1) |
Threads Config
Active Idle Total thread-max spare-thread-min
466 | 81 | 547 | 10240 | 25 |
参考了相关文档,后来发现Resin源码有个地方写的数据值是512,也就是说明Resin自身对最大数做了限制。
分享到:
相关推荐
2. "resin.conf":这是Resin服务器的配置文件,可能包含了与JOpenId相关的配置设置,如OpenID provider的URL,或者特定的过滤器和监听器配置。 3. "servlet-api.jar":这个文件是Servlet API的库文件,所有基于Java...
通过以上对《Web安全技术心得手册》部分内容的概述,我们可以看到该手册涵盖了Web安全领域的多个关键主题,包括但不限于路径遍历、文件上传、跨站请求伪造(CSRF)、SQL注入、Linux下的渗透测试技术、旁注攻击、图片...
8. **AppServer了解**:Tomcat、WebLogic、WebSphere、JRun和Resin等是常见的应用服务器,开发者至少需要熟悉一种。例如,Tomcat的安装和配置可以在三四天内掌握,对于不涉及EJB的项目,可能只需要了解基本的使用。 ...
- **Resin服务器**:介绍Resin服务器的安装和配置过程,适用于开发测试阶段。 #### 2. 系统功能模块 - **书籍管理**:包括添加、删除、修改书籍信息等。 - **用户管理**:实现用户注册、登录、个人信息修改等功能。...
轴类零件加工工艺设计.zip
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。
seaborn基本绘图人力资源数据集
移动机器人(sw三维)
自制html网页源代码查看器
3吨叉车的液压系统设计().zip
1_实验三 扰码、卷积编码及交织.ppt
北京交通大学软件学院自命题科目考试大纲.pdf
雅鲁藏布江流域 shp矢量数据 (范围+DEM).zip
基于RUST的数据结构代码示例,栈、队列、图等
NIFD:2024Q1房地产金融报告
详细介绍及样例数据:https://blog.csdn.net/li514006030/article/details/146916652
【工业机器视觉定位软件Vision-Detect】基于C#的WPF与Halcon开发的工业机器视觉定位软件(整套源码),开箱即用 有用户登录,图片加载,模板创建,通讯工具,抓边抓圆,良率统计,LOG日志,异常管理,九点标定和流程加载保存等模块,功能不是很完善,适合初学者参考学习。 资源介绍请查阅:https://blog.csdn.net/m0_37302966/article/details/146912206 更多视觉框架资源:https://blog.csdn.net/m0_37302966/article/details/146583453
内容概要:本文档详细介绍了Java虚拟机(JVM)的相关知识点,涵盖Java内存模型、垃圾回收机制及算法、垃圾收集器、内存分配策略、虚拟机类加载机制和JVM调优等内容。首先阐述了Java代码的编译和运行过程,以及JVM的基本组成部分及其运行流程。接着深入探讨了JVM的各个运行时数据区,如程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区等的作用和特点。随后,文档详细解析了垃圾回收机制,包括GC的概念、工作原理、优点和缺点,并介绍了几种常见的垃圾回收算法。此外,文档还讲解了JVM的分代收集策略,新生代和老年代的区别,以及不同垃圾收集器的工作方式。最后,文档介绍了类加载机制、JVM调优的方法和工具,以及常用的JVM调优参数。 适合人群:具备一定Java编程基础的研发人员,尤其是希望深入了解JVM内部机制、优化程序性能的技术人员。 使用场景及目标:①帮助开发人员理解Java代码的编译和执行过程;②掌握JVM内存管理机制,包括内存分配、垃圾回收等;③熟悉类加载机制,了解类加载器的工作原理;④学会使用JVM调优工具,掌握常用调优参数,提升应用程序性能。 其他说明:本文档内容详尽,适合用作面试准备材料和技术学习资料,有助于提高开发人员对JVM的理解和应用能力。
Android项目原生java语言课程设计,包含LW+ppt
戴德梁行&中国房地产协会:2021亚洲房地产投资信托基金研究报告