解决错误java.lang.OutOfMemoryError: Java heap space

最近在开发的一个项目时,进行了一把压力测试,模拟500用户的访问都扛不住,tomcat就连续抛java.lang.OutOfMemoryError的错误,上 网google了一下,了解了一下tomcat的运行机制,也解决了问题,share出来,以备查。

1、首先是:java.lang.OutOfMemoryError: Java heap space

解释:

Heap size 设置

JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置Heap size的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置。Heap size 的大小是Young Generation 和Tenured Generaion 之和。
提示:在JVM中如果98%的时间是用于GC且可用的Heap size 不足2%的时候将抛出此异常信息。
提示:Heap Size 最大不要超过可用物理内存的80%,一般的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值。

解决方法:

手动设置Heap size
修改TOMCAT_HOME/bin/catalina.bat,在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:
set JAVA_OPTS=%JAVA_OPTS% -server -Xms800m -Xmx800m -XX:MaxNewSize=256m

或修改catalina.sh
在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:
JAVA_OPTS="$JAVA_OPTS -server -Xms800m -Xmx800m -XX:MaxNewSize=256m"

2、其次是:java.lang.OutOfMemoryError: PermGen space

原因:

PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中,它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的应用中有很CLASS的话,就很可能出现PermGen space错误,这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。

解决方法:

1. 手动设置MaxPermSize大小
修改TOMCAT_HOME/bin/catalina.bat(Linux下为catalina.sh),在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:
set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=128M -XX:MaxPermSize=512m

catalina.sh下为:
JAVA_OPTS="$JAVA_OPTS -server -XX:PermSize=128M -XX:MaxPermSize=512m"


另外看到了另外一个帖子,觉得挺好,摘抄如下:
分析java.lang.OutOfMemoryError: PermGen space

发现很多人把问题归因于: spring,hibernate,tomcat,因为他们动态产生类,导致JVM中的permanent heap溢出 。然后解决方法众说纷纭,有人说升级 tomcat版本到最新甚至干脆不用tomcat。还有人怀疑spring的问题,在spring论坛上讨论很激烈,因为spring在AOP时使用CBLIB会动态产生很多类。

但问题是为什么这些王牌的开源会出现同一个问题呢,那么是不是更基础的原因呢?tomcat在Q&A很隐晦的回答了这一点,我们知道这个问题,但这个问题是由一个更基础的问题产生。

于是有人对更基础的JVM做了检查,发现了问题的关键。原来SUN 的JVM把内存分了不同的区,其中一个就是permenter区用来存放用得非常多的类和类描述。本来SUN设计的时候认为这个区域在JVM启动的时候就 固定了,但他没有想到现在动态会用得这么广泛。而且这个区域有特殊的垃圾收回机制,现在的问题是动态加载类到这个区域后,gc根本没办法回收!


对于以上两个问题,我的处理是:

在catalina.bat的第一行增加:
set JAVA_OPTS=-Xms64m -Xmx256m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m

在catalina.sh的第一行增加:
JAVA_OPTS=-Xms64m -Xmx256m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m

Windows下查看端口被程序占用和释放的方法

 

有时安装程序时,会出现XX端口被占用的情况,可以通过CMD命令查看什么程序占用
1. netstat -ano 查看相应端口对应程序的PID
例如:
C:\>netstat -ano
Active Connections
Proto Local Address          Foreign Address        State           PID
TCP    0.0.0.0:135            0.0.0.0:0              LISTENING       1760
TCP    0.0.0.0:445            0.0.0.0:0              LISTENING       4
TCP    0.0.0.0:2967           0.0.0.0:0              LISTENING       660
TCP    0.0.0.0:3389           0.0.0.0:0              LISTENING       1712
TCP    0.0.0.0:3934           0.0.0.0:0              LISTENING       728
TCP    0.0.0.0:10700          0.0.0.0:0              LISTENING       4920
TCP    10.186.20.116:21       0.0.0.0:0              LISTENING       272
TCP    10.186.20.116:80       0.0.0.0:0              LISTENING       4516

可查看到占用21端口的进程PID为272
2. tasklist查看相应的PID号的程序
   tasklist /fi "pid eq PID"
例,
C:\tasklist /fi "pid eq 272"
图像名                       PID 会话名           会话#       内存使用
========================= ====== ================ ======== ============
ServUDaemon.exe              272 Console                 0      3,980 K
3. 如果要释放该端口 用tskill PID 命令
例,如要释放21端口
tskill 272

windows系统查端口占用进程命令

 

假如我们需要确定谁占用了我们的80端口 
 
1、Windows平台 
 
在windows命令行窗口下执行: 
 
C:\>netstat -aon|findstr "80" 
 
TCP     127.0.0.1:80         0.0.0.0:0               LISTENING       2448 
 
看到了吗,端口被进程号为2448的进程占用,继续执行下面命令: 
 
C:\>tasklist|findstr "2448" 
 
thread.exe                     2016 Console                 0     16,064 K 
 
很清楚吧,thread占用了你的端口,Kill it 
 
如果第二步查不到,那就开任务管理器,看哪个进程是2448,然后杀之即可。 
 
如果需要查看其他端口。把 80 改掉即可 

标签:

Eclipse的svn插件更换帐号登陆的方法

在svn的界面中并没有为我们提供直接更换用户名密码的地方,所以一旦我们需要更换用户名的就需要自己想一些办法,最简单的做法就是通过删除SVN客户端的账号配置文件的方法更新,找到我们使用的客户端配置文件,在window xp下面他们的位置在系统盘的 Documents and Settings\administrator\Application Data\Subversion\auth\文件夹中,
把里面的所有文件删除,再次启动SVN就会有所改变了

标签:

搞笑游戏网名100个

1 某天路过邻水镇,碰见一个SS,游戏ID为。。。。怪很强你先上
2 我见过一个人  我掩护你去送死
3 精液你会不会来............... 哈哈 不错
4 我见到有个帮的名字叫"我们帮的名字就是长 有个SS名字叫"原来名字可以这么长
5 有个男 MM 名字好恶心."老衲************"
6 某人行会称号:如果名字取的太长站在树后就会被敌人发现的哦
7 见过一人叫‘师太你就从了老衲吧’ 刚刚又看见个 SS,,头顶着:老纳成全了师太
8 还有2个人 胯下有神话 胯下有奇迹
9 日在落日打怪,,,路过一WX。。。ID怪怪。。。。。拉链夹到鸟
10 以前国F论坛上看到类似的主题,其中一贴印象比较深刻 两个一起练及的,一个叫“老子会飞”,旁边的叫“老子也会飞"
11 又碰到个超级长的ID。。。。女友糖尿病害我蛀牙 哈哈 特强
12 又一个 SS 顶着长长的名字,,,看的我极端郁闷中。。。。。
13 以前在别的论坛看到帖子:是个带BB的猎人,他名字叫:朕射你无罪,BB叫:谢主龙恩
14 我也看到一个 YJ 男娼起义
15 贫僧法号能抗(SS) 一紧张就射(MG) 农夫三拳有点痛
16 还有以前玩的一个游戏里有人叫 我来试试名字到底可以起几个字
17 你们说的都烂 我见过的ID最牛的是 好名字都给畜生用了
18 我看过一个摆摊的叫 买完东西卖旁边
19 曾看到一个老虎SS。。。名字是:景阳岗上挨过打
20 以前 传奇有个同学 叫 牛B哄哄震山东  济南的,挺压韵的
21 骑士里见过:铁掌奶上飘
22 还有:洞************结合,洞************皆宜,以************制洞,九阴争************ 哈哈
23 还有 “光看我能怀孕吗” ‘一招不秒撒腿就跑’
24 再发个今天看到的 装B挨打E然潇洒
25 哦原来名字能九个字 砂锅那么大的拳头
26 一SS:三拳打死武松
27 别的游戏见过,完美国际不知有没有——“经典含具大长************”(经典韩剧大长今)
28 看见个 内裤我一直用雕牌
29 看一妹妹起名“臭鼠标拿开”
30 一兄弟“一年硬两次” 他兄弟 “一次硬半年”
31 见过个YJ叫“我是自愿的” 我还在纳闷呢 她口哨一吹
31 见过个YJ叫“我是自愿的” 我还在纳闷呢 她口哨一吹 BB跳了出来叫“我是被逼的”。。。。
32 我们帮主叫妖兽没文化,还有一个高级SS,叫兽兽力量大
33 那个是我们逐风的吧 全名字叫 ~闪开老衲要射~
34 偶以前见过:名字太短容易被敌人记住
35 还有以前玩龙与地下城的 时候 那个游戏的名字可起的很长很长 大概可以30个字把 有位大哥 就起个 名字长的好处就是可以在别人看你 名字的时候把他秒杀了
36 有个叫:我杀了如来就是佛
37 见一SS叫:我也用妇炎洁
38 我以为我是羽毛,一芒果ID。
39 见过一个人叫 日出东方 旁边一个mm叫 我们一起造东方
40 某天在做任务,反正一男一女,男战女法 男的: 那一夜不是我 女的: 那一夜就是我
41 以前我工会有个人叫:施主您装B 然后我那工会长起的工会名字正好是:哇 别人一看就是:哇,施主您装B
42 妖精:嘟嘟熊 宝宝:嘟嘟熊的嘟嘟熊
43 比翼有个叫 大象掉进蚂蚁洞
44 我在我们服见了个郁闷的ID 没医德; 郁闷的是他练的是个MM,晕,都没医德了你还练个医生
45 以前玩传奇世界时看到过一个ID:打不过我就跑  他的元神分身叫:主人跑我也跑
46 地上有跑过1只SS ID 劳资禽兽 然后又跑过一只SS。ID 劳资禽兽不如
47 某日摆摊中~看见个人叫 有种就看我一眼 结果不小心点了下 吓的我哭了~~~~~
48 就有一个人叫:风吹几吧毛不动(原字是“鸡”) 我直接翻了
49 我SS的名字是“不要数一共有多少字”
50 一WX 替天行房
51 鸡插地里歼地球 歼大家都知道哪个..
52 某日 一 WX 顶着 疾云步 猛跑 一看 ID PK实战发型不乱
53 以前玩武林外传的时候,有两个人.叫 请输入你的帐号 请输入你的密码
54 夫妻号:男:锄禾 女: 当午 男:清明 女:河图
55 偶以前见过的名字 日不死你我懦夫
56 WOW里 猎人:你的老婆和我 宝宝:发生了关系 pvp时战斗显示:你的老婆和我的宠物发生了关系对你造成了致命一击!
57 偶玩梦幻那时的朋友: 勃大************深(博大精深)
58 我上次建小号,起名字半天不行,一来火就起了个"现在起名字真他妈难"
59 这个ID是本人在游戏里面起的,有3个人物,分别是:发型不乱,发型还是不乱,发型始终不乱
60 一ss:“武松你给我出来”
61 见一大SS带一小SS做任务 前面的叫我是野生的 后面的叫我是家养的
62 拉开裤链找不着 另一种是 拉开裤链不见了
63 看完***换B片
64 不好意思射到你脸上
65 偶们那也有一强人叫“风吹逼毛两边倒” = =
66 一毛毛:两腿劈开就有钱
67 偶的小号fs 一次血爆引发的血案
68 我在************里见到一个是"狼牙山我装死"
69 这个厉害: 完美名字最多九个字
70 一fs的id:董存瑞举的是我 一mg的id:黄继光都没堵住我 哈哈 自己笑下先
71 有一次在万化看到一个YJ,化妆化的跟鬼一样,吓我一大跳, 一看名字——比如花还如花
72 跪下给我唱征服,................ 哈哈
73 我见过个女毛毛叫“东南西北方不败
74 我发现一个人叫"指着太阳说日"
75 还有发现三个人"行者孙 孙行者 者行孙",那次连续加他们进工会!!全工会的人都笑了
76 见过一个妖精,叫:没有尾巴和你一样
77 一MG PK起来一手汗
78 以前国F一朋友 胸比头大
79 又看见MM.................波涛胸涌
80 偶知道一个名字:刚从动物园里逃出来 兽兽的
81 有一次在万化城传送师附近看见一个叫:传送师 (SS) 结果看走眼了,不小心点传送时点到了他.....汗死了~他居然说:"恭喜你成为第100位 幸运玩家!
82 YJ 名: 就不给 宝宝名:给点吃的吧
83 在傲世的一个朋友叫:低温烫伤 很酷的名字
84 一SS 刀郎没我冲动
85 路见不平拔刀自刎
86 过一个男MM叫会接生的男人……
87 我有见过一个:把鼠标拿开
88 『都是太阳惹的祸』¨●=====注意:此人全黑
89 前天看见一SS和一毛毛一起练级! SS:我顶你挺 MM:我挺你顶 (仔细一想也挺有道理 SS能顶怪 MM挺胸用静心加血)
90 一MG的是 "一步一卡卡的潇洒"
91 一只熊猫名叫:“我是国宝别打我” 后来此熊猫见到一名法师叫做:“打的就是熊猫”
92 我看见的YJ叫做 看到色狼就装死..
93 偶新区一YJ ID:我是做了手术的女人
94 一MG 让公主受精了
95 偶们帮 有个女毛毛叫 阴小湿大 真是绝!!
96 我的妖精号叫“男扮女装混进妖界”
97 记得龙吟里看见有个熊猫头SS叫 : 毛茸茸的小可爱 ...爆寒....看的我鸡皮疙瘩都出来了
98 一MM 戴个奶罩多点防
99 见到过一个妖精,咬你命3000(知道要你命3000什么吧。。。)
100(终于100了) “名字长了在他念你名字时秒杀他

标签: