监视JSP中JVM可用内存

公司有个JSP项目内存经常溢出,tomcat两个小时左右就停,我写了一个类对JVM可用内存进行了监测

 
 
  1. import java.util.Timer;
  2. import java.util.TimerTask;
  3. import java.util.Calendar;
  4. import java.util.GregorianCalendar;
  5. /**  
  6. Title:GCTimerTask
  7. * @author zhuangyan
  8. * @msn:nacl_zhuang@hotmail.com
  9. * @qq:368924454
  10. * @version 1.0
  11. */
  12. public class GCTimerTask
  13. extends TimerTask {
  14. private static GCTimerTask instance = null;
  15. public void run() {
  16. Calendar cal = new GregorianCalendar();
  17. int hour24 = cal.get(Calendar.HOUR_OF_DAY); // 0..23
  18. int min = cal.get(Calendar.MINUTE); // 0..59
  19. System.out.print("["+String.valueOf(hour24)+":"+String.valueOf(min)+"]");
  20. System.out.println("JVM可用内存:" + java.lang.Runtime.getRuntime().
  21. freeMemory() / (1024*1024)+"M/"+java.lang.Runtime.getRuntime() .totalMemory()/(1024*1024)+"M" );
  22. System.gc();
  23. }
  24. private void startWork()
  25. {
  26. Timer t = new Timer();
  27. t.schedule(instance,0,1000*60);
  28. }
  29. public static GCTimerTask getInstance()
  30. {
  31. if(instance==null) {
  32. instance = new GCTimerTask();
  33. instance.startWork();
  34. }
  35. return instance;
  36. }
  37. }

这个类虽然简单,但初学者从中应该学到
1)timer类的用法
2)java.lang.Runtime.getRuntime().freeMemory(),java.lang.Runtime.getRuntime().totalMemory(),System.gc()
这三个方法的使用,需要说明的是System.gc()并不能强迫JVM马上释放内存,如果那样,我的内存溢出问题早就解决了.
3)getInstance()单例模式,
4)最后的就是怎么用这个类的问题,我把它放到了EncodingFilter类中,现在很多JSP程序中都有这个类吧

 
 
  1. public final void init(final FilterConfig arg0) throws ServletException {
  2. GCTimerTask.getInstance();
  3. this.filterConfig = arg0;
  4. this.encoding = filterConfig.getInitParameter("encoding");
  5. String value = filterConfig.getInitParameter("ignore");
  6. if (value == null) {
  7. this.ignore = true;
  8. }
  9. else if (value.equalsIgnoreCase("true")) {
  10. this.ignore = true;
  11. }
  12. else if (value.equalsIgnoreCase("yes")) {
  13. this.ignore = true;
  14. }
  15. else {
  16. this.ignore = false;
  17. }
  18. }

JVM可用内存:405M/508M
java.lang.OutOfMemoryError

为什么显示的JVM可用内存有400多M,还OutOfMemoryError?在window的资源管理器中看tomcat的内存用量是持续增加的,它和 java.lang.Runtime.getRuntime().freeMemory()是什么区别啊?

JSP溢出时在window资源管理器中tomcat内存占300多M,MSSQL内存也差不多到300M了.有什么办法可以定时重启这两个服务呢,我写了一个程序,在XP下可用.但2000下不能用.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值