8
回答
关于java web发布到服务器上,爆内存不足错误
注册华为云得mate10,2.9折抢先购!>>>   

是这样的。java web项目,一个电子商务网站,需要用到发送短信的。用的是华为的,打开华为的jar包,呵,有用的没用的全给你打成jar包了。。然后删包吧。删完之后,测试不行,给华为的工程师打电话,工程师说:我们的api不支持redhat系列的操作系统。。

我勒个去。这就算了吧。。我用jdbc直接操作数据库可以吧。。

短信数据库时db2的。网站数据库时mysql。通过jdbc连db2,随便写了个servlet,发布到服务器上,测试成功。(因为客户的数据库和网站服务器都在局域网..所以连不上。只有一个网站服务器的vpn.)

测试成功后,我放到项目里,改了改代码,基本没问题。发布到服务器上。我戳,内存不足。。这个问题一直在纠结我。

看了下服务器内存。1G。。。我去。果断给客户打电话,加内存,我建议加4G。客户不到半小时加好了,给我打电话,说好了。我在一看,我戳,2.5G。这尼玛服务器果断虚拟机啊。

重新发布项目,测试还是有问题。去掉db的连接驱动包,ok了。但是加上,就内存不足。

这种内存不足是不是服务器是虚拟机的缘故?或者服务器的内存太小?还是db2的jar包有问题呢?求解。

举报
54mark
发帖于5年前 8回/1K+阅
共有8个答案 最后回答: 5年前

第一, 我不是牛

第二, 代码有内存泄露.

第三, 通常短信连接可以支持异步操作. 要仔细研究他们的api. 华为的东西, 质量还是很高, 不用怀疑. 我曾经用网关程序连接他们的系统, 一天下行超过500万, 都没有问题. 所有信息都有返回流水. 他们的东西, 还是很严谨的.

--- 共有 1 条评论 ---
54mark那为什么我把db2的jar包删掉。然后发布就不会有内存不足的问题呢?内存不足跟服务器是虚拟机有关系嘛? 5年前 回复

测试成功后,我放到项目里,改了改代码,基本没问题。发布到服务器上。我戳,内存不足。。这个问题一直在纠结我。
具体报错是什么,最好提供出来,OutOfMemery异常后面的那一小句message才是关键,导致 OutOfMemery的问题非常多的。

如果华为的那些jar里面的类很多你又用SSH的话,32位系统先改下jvm的参数吧

-server -XX:MaxPermSize=256m -Xms1024m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError


--- 共有 10 条评论 ---
逝水fox回复 @Cavalier : 我知道的,呵,不过一两句话说不清楚,况且1G多的堆内存其实分代gc也不会那么夸张,除非机器本身不好。1.5G的heap只是内存的一部分,还要其他空间来放栈和加载的动态连接库之类的,32位实际限制的是整个进程2G,他这里加载的类多,所以调高了MaxPermSize,Xmx需要适当的调低才能保证总体不超过限制,这样设置极限应该在1200m左右。 5年前 回复
Cavalier这个是对的 看错了 最多到1.5 G吧 每个机器都不一样 ,但是你最大最小这么设的话 如果做GC 服务就无法连接了 网上有相关配置 可以按时间片回收 配置我给忘记了 你找找吧 上个月这问题纠结了我一个星期。。。 5年前 回复
Cavalier这个是对的 看错了 最多到1.5 G吧 每个机器都不一样 ,但是你最大最小这么设的话 如果做GC 服务就无法连接了 网上有相关配置 可以按时间片回收 配置我给忘记了 你找找吧 上个月这问题纠结了我一个星期。。。 5年前 回复
逝水fox回复 @Cavalier : 32位系统上JVM进程最多就只能用2G内存,你确认你不是说的64位? 5年前 回复
Cavalier你确定你是做服务器的?你的JVM参数设置太小了吧 5年前 回复
 据你的描述 我猜测原因是因为类太多了 导致perm区不够用 所以你删除了一些类或者jar后 不报错 你要加个启动参数-XX:MaxPermSize 将perm区调大一些 应当没问题
--- 共有 1 条评论 ---
54mark怪不得我之前改过也不行,原来写错地方了。。 linux服务器里的tomcat里的catalina.sh方法里cygwin=false上面加一句JAVA_OPTS="-Xms256m -Xmx512m -Xss1024K -XX:PermSize=128m -XX:MaxPermSize=256m"就搞定了。多谢。 5年前 回复

华为MAS吧? 一直用他们的驱动包发短信,还算可以啊.

是不是应用服务器和MAS服务器之间的网络有问题?导致DB2的连接都挂起了?

也可以检查一下,是不是MAS机器的参数有问题?

一般来说,异步用MAS发短信,相当稳定

--- 共有 5 条评论 ---
54mark回复 @CheckStyle : 怪不得...我也想着华为多大的公司啊,一个小小的api不支持redhat...怎么可能嘛。 5年前 回复
CheckStyle@54mark 那帮是华为外包的实施工程师,三四千块就能打发的,水平如何,你能想象得到 5年前 回复
54mark回复 @CheckStyle : centos.反正华为的工程师说短信api不支持redhat操作系统。。mas机应该是支持的 5年前 回复
CheckStyle回复 @54mark : 哪个版本?俺这边管的系统很多RedHat,MAS照样用 5年前 回复
54mark事实证明华为的连接mas机的短信api不支持redhat操作系统。。 最后只能用jdbc连接mas机了,是内存问题。修改了下服务器的jvm的参数。 5年前 回复

大部分可能是内存引起的。也可能不一定是内存不足,还有可能是程序写得不好的 。

--- 共有 1 条评论 ---
54mark嗯。服务器内存是不够。不过我还是要检查下我的代码。 5年前 回复
顶部