websphere内存设置_WebSphere Classloader内存泄漏预防

websphere内存设置

解决应用程序类加载器泄漏

应用领域 倾向于:

  • 使用应用程序类加载器中的Runnable实现启动新线程。 即使JEE编程模型不支持此功能,客户也经常直接创建新线程或通过使用间接创建它们 计时器 客户必须确保在停止相应的应用程序(或WAR模块)时停止这些线程:
    • 可以在停止WAR进行清理时使用javax.servlet.ServletContextListener.contextDestroyed进行通知。
  • 使用ThreadLocal的静态存储一个ThreadLocal)。 ThreadLocal值有效地存储为每个Thread中的 WeakHashMap 。 由于这些值通常包含应用程序对象,因此该应用程序对象引用其Class ,该Class引用其ClassLoader ,该ClassLoader引用包含ThreadLocalClass ,弱引用永远不会中断,并且会发生泄漏。

    鼓励客户避免使用 ThreadLocal ,或者在模块停止时清除对ThreadLocal的引用(请参见上文),或确保在每次请求后都调用remove()

  • 向JMX服务器注册JMX MBean或NotificationListener 。 客户必须确保在停止相应的应用程序(或WAR模块)时取消注册。

任意组件

这包括JDBC提供程序,第三方软件和本身想要实现以下目的的应用程序:
  • 启动新线程,包括由java.util.Timer构造函数创建的“定时器线程”。 创建线程时 ,将从原始线程复制两条信息:
    1. 上下文类加载器( getContextClassLoader() )。 当应用程序正在执行时,容器将上下文类加载器设置为模块类加载器,因此新创建的线程将在上下文类加载器存在期间保持其活动状态。 可以通过在启动计时器之前调用setContextClassLoader到非应用程序类加载器来避免这种情况,然后再将其重置。
    2. 调用线程的AccessControlContext (如AccessController所述 )。 如果线程是由于来自应用程序的API调用而正在启动,则应用程序的ProtectionDomain将位于AccessControlContext中 ,并且应用程序类的ProtectionDomain将包括对其ClassLoader的引用。 通过使用doPrivileged创建线程可以避免这种情况。 请注意,必须注意确保使用doPrivileged不允许非特权应用程序创建线程。

    例如:

    // doPrivileged fixes the AccessControlContext leak, and it is also required
    // for calls to Thread.get/setContextClassLoader.
    Timer timer = AccessController.doPrivileged(new PrivilegedAction() {public void run() {Thread thread = Thread.currentThread();ClassLoader savedCL = thread.getContextClassLoader();thread.setContextClassLoader(null);try {// The Timer constructor will create a Thread, which will copy the// context class loader from the current thread, which is now null.return new Timer(true);} finally {thread.setContextClassLoader(savedCL);}}
    });
  • 将数据与当前上下文类加载器关联。 这通常是通过Map <classloader Value> </ classloader完成的 。 此地图必须:
    1. 具有明确的生命周期API。 在这种情况下,必须调用生命周期API。 如果代码是由客户介绍的,则客户负责添加JMX侦听器。 如果代码是由WAS prereq引入的,则所有者必须使用WAS应用程序侦听器API。 如果代码属于JDK,则运行时团队将承担调用它的责任(例如ResourceBundle.clearCacheIntrospector.flushCaches )。
    2. 成为WeakHashMap以允许对ClassLoader键进行垃圾收集。 请注意,该值不得包含对从该ClassLoader创建的类或对象的非弱引用,否则该条目将永远不会被删除。 WeakHashMap <ClassLoader,WeakReference <Class >>或WeakHashMap <ClassLoader,Tuple>,其中Tuple包含从类实例化的对象的WeakReference <Class>和WeakReference <Object>。 在这两种情况下,Class的保持都很弱,这仍然允许ClassLoader的收集。 在后一种情况下,如果发生GC,将清除对实例化对象的引用,但假定可以廉价地重新实例化该对象。

    这些技巧由WAS专家Brett Kail提供

    参考:来自JCG合作伙伴的 WebSphere Classloader内存泄漏预防   All Things WebSphere博客上的Rohit Kelapure。


    翻译自: https://www.javacodegeeks.com/2012/03/websphere-classloader-memory-leak.html

    websphere内存设置

    本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/356990.shtml

    如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

    相关文章

    zookeeper删除节点的权限_Zookeeper使用超级用户删除带权限的节点

    1.背景Zookeeper管理员会因为某些客户端对某些节点设置了权限&#xff0c;而导致在紧急的情况下无法修改这些节点感到困扰。在这种情况下&#xff0c;管理员可以通过Zookeeper超级用户模式访问这些节点&#xff0c;一旦设置了超级权限访问节点&#xff0c;后续的操作就不需要ch…

    JavaScript测验——使用赋值运算符初始化变量---第4关

    通常在声明变量的时候会给变量初始化一个初始值。 例如: var myVar 0; 以上代码创建一个名为myVar的变量并指定一个初始值0。

    Zabbix-3.0.0 安装Graphtree

    导读Zabbix中&#xff0c;想要集中展示图像&#xff0c;唯一的选择是screen&#xff0c;后来zatree解决了screen的问题&#xff0c;但性能不够好。Graphtree 由OneOaaS开发并开源出来&#xff0c;用来解决Zabbix的图形展示问题&#xff0c;性能较好。一、Graphtree功能概述集中…

    装饰器设计模式示例

    本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中&#xff0c;您将深入研究大量的设计模式&#xff0c;并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因&#xff0c;并了解何时以及如何应用模式中的每一个。 在这里查看 &#xff01; 目录 …

    5.1.2全景声音箱摆位_如何体验全景声

    如何体验全景声&#xff08;科普&#xff09;要想体验全景声&#xff0c;三大要素不可少。1、输出设备&#xff1a;支持全景声的播放设备&#xff0c;比如碟机&#xff0c;比如电视盒子&#xff0c;比如XBOXONEX。如果电视和音响都支持EARC&#xff0c;则可以不用播放设备&…

    JavaScript测验——未初始化的变量---第5关

    校验规则 当你用一个值是undefined的变量来做字符串拼接操作的时候&#xff0c;它会输出字符串"undefined"。 闯关: 定义 3 个变量a、b、c&#xff0c;并且分别给他们赋值&#xff1a;3、9、"I am pretty"&#xff0c;这样它们值就不会是undefined了。

    Java中使用Socket实现服务器端和客户端通讯

    创建服务器端serverSocket 1 import java.io.BufferedReader;2 import java.io.IOException;3 import java.io.InputStream;4 import java.io.InputStreamReader;5 import java.io.OutputStream;6 import java.io.PrintWriter;7 import java.net.ServerSocket;8 import java.ne…

    修改telnet提示并非_俊翔:修改ECU数据解除奔驰GL350尿素限制

    为达到排放要求&#xff0c;很多乘用柴油车都要加尿素(Adblue)&#xff0c;以降低废气排放。在轿车维修当中&#xff0c;最常见的有奔驰GL350、路虎揽胜出现尿素锁定。仪表上提示加尿素&#xff0c;并且限制启动次数。每当把发动机熄火再启动一次&#xff0c;次数就会减少&…

    JavaScript测验——变量名大小写---第6关

    校验规则 例如&#xff1a; var userName; var userLoginFlag;闯关: 修改已声明的变量&#xff0c;让它们的命名符合驼峰命名法的规范。 这个需要注意的是在声明和赋值时都应该使用驼峰命名法。

    python编码规范

    python编码规范 文件及目录规范 文件保存为 utf-8 格式。程序首行必须为编码声明&#xff1a;# -*- coding:utf-8 -*-文件名全部小写。代码风格 空格 设置用空格符替换TAB符。代码缩进为4个空格符。仅在运算符前后&#xff08;如,-,,&#xff09;各加一个空格&#xff0c;不要在…

    redux异步action_React躬行记(12)——Redux中间件

    Redux的中间件&#xff08;Middleware&#xff09;遵循了即插即用的设计思想&#xff0c;出现在Action到达Reducer之前&#xff08;如图10所示&#xff09;的位置。中间件是一个固定模式的独立函数&#xff0c;当把多个中间件像管道那样串联在一起时&#xff0c;前一个中间件不…

    java方法示例注释 @_Java注释和真实世界的Spring示例

    java方法示例注释 “注释”是编程语言定义的一种&#xff0c;并用作“标记”。 可以将它们视为编程语言引擎可以理解的注释行。 它们不会直接影响程序的执行&#xff0c;但会直接影响程序的执行。 定义 注释使用interface关键字定义&#xff0c;并且与接口相似。 它具有定义类…

    监控与管理

    本文是我们名为“ Spring Integration for EAI ”的学院课程的一部分。 在本课程中&#xff0c;向您介绍了企业应用程序集成模式以及Spring Integration如何解决它们。 接下来&#xff0c;您将深入研究Spring Integration的基础知识&#xff0c;例如通道&#xff0c;转换器和适…

    郑州智慧岛大数据管委会_数据科学融通应用数学 ‖ 智慧岛大讲堂

    8月6日上午&#xff0c;郑东新区智慧岛大数据实验区管委会&#xff0c;举办了“数据科学融通应用数学”专题智慧岛大讲堂讲座&#xff0c;邀请到北京大学数学科学学院副教授、大数据分析与应用技术国家工程实验室郑州数字创新中心主任卢朓为本次大讲堂活动做主题分享&#xff0…

    浏览器中的WebSocket(ws://127.0.0.1:9988);

    <script type"text/javascript">function WebSocketTest(){if ("WebSocket" in window){alert("您的浏览器支持 WebSocket!");// 打开一个 web socketvar ws new WebSocket("ws://localhost:9998/echo");ws.onopen function()…

    db2 获取返回的游标_MySQL ------ 存储过程与游标简单使用

    存储过程小例子如完成以下事情&#xff0c;获得与之前一样的订单合计&#xff0c;但需要对合计增加营业税&#xff0c;不过只针对某些顾客主要就是&#xff1a;1、获得合计2、把营业税有条件的添加到合计 3、返回合计&#xff08;带或不带税&#xff09;delimiter $$-- 存储过程…