resin.conf 中有 <min-free-memory>设置,是resin内部有一个thread每隔10秒钟检查JVM剩余内存,如果free memory小于 2*min-free-memory,则执行Runtime.gc() 强制进行GC,如果使用-XX:+DisableExplicitGC 禁用显式调用GC,则该设置无效。
对应的代码如下(com/caucho/server/resin/Resin.java):
- long minFreeMemory = _server.getMinFreeMemory();
- if (minFreeMemory <= 0) {
-
- }
- else if (2 * minFreeMemory < getFreeMemory(runtime)) {
-
- }
- else {
- if (log().isLoggable(Level.FINER)) {
- log().finer(L().l("free memory {0} max:{1} total:{2} free:{3}",
- "" + getFreeMemory(runtime),
- "" + runtime.maxMemory(),
- "" + runtime.totalMemory(),
- "" + runtime.freeMemory()));
- }
-
- log().info(L().l("Forcing GC due to low memory. {0} free bytes.",
- getFreeMemory(runtime)));
-
- runtime.gc();
-
- if (getFreeMemory(runtime) < minFreeMemory) {
- _isClosed = true;
- log().severe(L().l("Restarting due to low free memory. {0} free bytes",
- getFreeMemory(runtime)));
- return;
- }
其中getMinFreeMemory()如下:
- private static long getFreeMemory(Runtime runtime)
- {
- long maxMemory = runtime.maxMemory();
- long totalMemory = runtime.totalMemory();
- long freeMemory = runtime.freeMemory();
-
- if (maxMemory < totalMemory)
- return freeMemory;
- else
- return maxMemory - totalMemory + freeMemory;
- }
计算jvm空余内存的方法值得注意一下:由于JVM可以使用-Xms 和-Xmx 指定启动内存和最大内存,所以计算空余内存的时候,需要考虑到JVM可以分配的最大内存(runtime.maxMemory())和当前可使用的最大内存(runtime.totalMemory()),因此最终的free memory =当前空余内存(runtime.freeMemory()) + 可以分配但还没有分配的内存(runtime.maxMemory() - runtime.totalMemory())
--EOF--
分享到:
相关推荐
### Resin内存溢出后自动重启方案解析 #### 背景介绍 Resin是一款高性能、功能丰富的Java应用服务器及Web容器,广泛应用于各种企业级应用程序和服务中。它支持多种编程语言,包括Java、JSP等,并且在性能优化方面...
Java 使用 Apache+Resin 实现负载均衡设置 Java 使用 Apache+Resin 实现负载均衡设置是一种常见的解决方案,旨在提高系统的可用性和可扩展性。下面是该方案的详细说明: 一、为什么需要负载均衡? 在实际应用中,...
这篇博客文章“resin中关于日志的配置”着重讲解了如何在Resin服务器上管理和配置日志系统,这对于监控应用状态、调试问题以及优化性能至关重要。下面将详细阐述相关知识点。 1. **日志的重要性**: - 日志记录了...
Eclipse作为主流的Java集成开发环境,虽然原生不直接支持Resin的调试,但通过一些设置技巧,我们可以在Eclipse下进行Resin的调试工作。本文将详细介绍如何在Eclipse中设置Resin-debg。 1. **创建Debug配置** 首先...
gc即垃圾收集机制是指jvm用于释放那些不再使用的对象所占用的内存。java语言并不要求jvm有gc,也没有规定gc如何工作。不过常用的jvm都有gc,而且大多数gc都使用类似的算法管理内存和执行收集操作。 在充分理解了...
3. **内存管理**:Resin3采用了高效的内存管理策略,降低了内存泄漏的风险。 4. **线程池管理**:通过线程池,Resin3能够有效地调度和复用线程,提高系统资源利用率。 5. **负载均衡与集群**:支持多服务器间的负载...
2. `conf`目录:存放Resin的配置文件,如`resin.conf`,在这里可以设置服务器端口、JVM参数、web应用程序的部署路径等。 3. `lib`目录:包含了Resin运行所需的库文件,如JAR包。 4. `logs`目录:存储Resin运行时的...
2. **轻量级**:尽管Resin3支持Java EE标准,但它的设计初衷是作为一个轻量级服务器,相比于其他大型应用服务器,如Tomcat和WebLogic,Resin3具有更小的内存占用和更快的启动时间。 3. **Quercus PHP支持**:Resin3...
通常,Resin的配置文件`resin.conf`位于`resin1`目录下,可以在这里设置服务器的端口、数据源、session管理、集群配置等参数。在`resin-webapp`目录下的`WEB-INF`目录里,可以放置Web应用的`web.xml`部署描述符,...
`<javac>`标签用于配置Java编译器,`compiler`属性可以设置为"javac"、"eclipse"或"internal",这里设置为"internal",意味着使用Resin内置的Java编译器,并通过`args`属性指定编译选项,例如 `-source 1.5`表示支持...
【Resin常见有关问题详解】 Resin是一款由CAUCHO公司开发的高性能Web服务器和应用服务器,它专门支持Servlets和JSP,并以其快速的处理能力而受到青睐。Resin内建了HTTP/1.1协议的支持,不仅擅长处理动态内容,而且...
对于单个 Resin 实例的管理,可以通过配置文件 `resin.xml` 来进行详细的设置,包括监听端口、安全设置等。 ##### 1.15-1.17 负载均衡与监控 Resin 还提供了负载均衡的功能,可以配置多个 Resin 实例,并通过负载...
8. **内存管理**:Resin使用智能的内存管理策略,如分代垃圾回收,以减少停顿时间并提高性能。 9. **安全特性**:Resin支持基本的认证、授权和SSL加密,确保Web应用的安全性。 10. **日志和监控**:Resin提供了...
- **Program arguments**:根据 Resin 版本不同,设置 `-conf` 参数指向 `resin.conf` 或 `resin3.conf` 文件。 - Resin 3.x:`-conf"${project_loc}\resin3.conf"` - **VM arguments**:配置虚拟机参数,包括 ...
在解压后的`resin-4.0.45`目录下,可以通过修改`conf/resin.conf`进行定制化配置,例如设置服务器端口、JVM参数等。 **应用部署** 部署Java Web应用到Resin,通常需要将WAR文件放在`webapps`目录下,或者通过Resin...
- **调整JVM堆内存大小**:可以通过命令行参数如`-Xmx`来指定最大堆内存大小,例如`-Xmx512m`表示将最大堆内存设置为512MB。 - **使用内存分析工具**:例如`-verbosegc`选项可以启用详细的GC日志记录,通过分析这些...
2. **轻量级**: 相比其他Java应用服务器,Resin体积小巧,启动速度快,内存占用低。 3. **兼容性**: 支持Java EE标准,包括Servlet、JSP、EJB、JMS等,易于与其他Java技术集成。 4. **灵活性**: 提供了丰富的配置...
Resin,全称为Caucho Resin,是一款高效、轻量级的应用...在部署和管理Resin 3.1.8时,需要根据项目需求进行适当的配置调整,如设置虚拟主机、调整内存分配、配置集群等,以确保服务器能够高效、稳定地运行应用程序。
根据性能需求,可以调整Resin和IIS的配置,例如调整线程池大小、内存分配、日志级别等。 6. 维护与更新:定期检查Resin和IIS的日志,监控系统的性能和稳定性。如果有新的Resin版本发布,可以考虑升级以获取最新的...
此外,还可以通过调整JVM的内存设置,如-Xms和-Xmx,来优化Resin的性能。 总之,Resin的安装和配置是一个相对简单的过程,只需按照上述步骤操作,即可在Windows环境下顺利运行和调试JSP应用。记住,配置过程中遇到...