tomcat启动后,不能执行java或javac命令

zoutuo 2012-02-06 10:50:36
JAVA_OPTS="-server -Xms256M -Xmx256M -Xss128k -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:PermSize=256M -XX:MaxPermSize=256M"


我是linux系统,内存1GB,tomcat/bin下的catalina.sh加入上述参数后,在shell里输入java或者javac会出现下列错误提示:

[zoutuo@zousServer SSLSocket]$ java
Error occurred during initialization of VM
Could not reserve enough space for code cache
[zoutuo@zousServer SSLSocket]$ javac
Error occurred during initialization of VM
Could not reserve enough space for code cache
[zoutuo@zousServer SSLSocket]$


请问这是为什么?我的内存可是1G的。。。而且我还要运行一个jar文件,java都用不了,java -jar 更用不了了。。。。
...全文
379 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zoutuo 2012-02-08
  • 打赏
  • 举报
回复
看来我还得深入了解下linux啊。out of memory、cannot allocate memory这些东西都出来了。不过还是谢谢你了!!结贴吧。别人也没人回复。。。
MiceRice 2012-02-07
  • 打赏
  • 举报
回复
贴代码啥的就免了,操作系统参数啥的并不是我强项,可能帮不到你。

不过看你这个说法的话,我认为Tomcat不会对内存要求很高,可以降低启动内存。

SSL协议处理Tomcat的效率可没有Apache高,如果流量大的话,可以考虑装个反向代理转么负责解决SSL,另外还可以附带处理掉所有静态资源请求,如HTML、jpg、css啥的,如果带宽不够还可以启动deflate压缩。

Anyway,超出命题很多了,且不是一两句可以说完,建议逐步优化,一口也吃不成胖子,呵呵。
zoutuo 2012-02-07
  • 打赏
  • 举报
回复
谢谢ldh911的回答!
我给你说一下我服务器的环境,请你帮我参谋一下参数什么的。

1、mysql 这个不用说了,不过没做什么优化。。一直在跑默认
2、tomcat。里面跑的是一个小网站,很小。。。但开了一个端口的SSL Socket服务端。我觉得应该没问题,在finally里是写了close的
3、一个jar文件,目的是接收文件。这个jar只做IO处理,和数据库啥的无关。
4、tomcat和jar的socket服务器端代码我晚上可以贴出来。

服务器配置:
[zoutuo@zousServer ~]$ cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 15
model name : Intel(R) Xeon(R) CPU 5160 @ 3.00GHz
stepping : 6
cpu MHz : 2992.452
cache size : 4096 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 2
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 10
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca lahf_lm tpr_shadow
bogomips : 5984.90
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:

[zoutuo@zousServer ~]$ free
total used free shared buffers cached
Mem: 1048576 397452 651124 0 0 40556
-/+ buffers/cache: 356896 691680
Swap: 0 0 0
zoutuo 2012-02-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ldh911 的回复:]

-Xms256M -XX:PermSize=256M,这两个加起来就是 512MB 了。

你尝试下缩小XX:PermSize参数吧,比如修改为:
-XX:PermSize=128M -XX:MaxPermSize=128M
[/Quote]

这样可以,而且也运行了那个jar,但一开始我就是这样设置,内存慢慢都被吃没了,当到420MB的时候,我ssh都连不上了,只能重启,才好。。。是不是有内存泄露,。,。。。我那个jar写的是sslsocket。但我和io有关的地方最后都close了啊。。。。tomcat里能出现内存泄露吗?是不是和mysql不支持事务有关呢。。。。
MiceRice 2012-02-06
  • 打赏
  • 举报
回复
-Xms256M -XX:PermSize=256M,这两个加起来就是 512MB 了。

你尝试下缩小XX:PermSize参数吧,比如修改为:
-XX:PermSize=128M -XX:MaxPermSize=128M
zoutuo 2012-02-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ldh911 的回复:]

你这个XX:PermSize配置的也不小啊。

你还是用top看看空闲内存究竟还剩多少吧。
[/Quote]
还有不少呢````:

top - 11:11:29 up 2 days, 14:23, 2 users, load average: 0.00, 0.01, 0.00
Tasks: 23 total, 1 running, 22 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1048576k total, 382920k used, 665656k free, 0k buffers
Swap: 0k total, 0k used, 0k free, 60232k cached
MiceRice 2012-02-06
  • 打赏
  • 举报
回复
你这个XX:PermSize配置的也不小啊。

你还是用top看看空闲内存究竟还剩多少吧。
MiceRice 2012-02-06
  • 打赏
  • 举报
回复
◎ 你是说在执行jar包的时候也加上-XX:PermSize=32M -XX:MaxPermSize=32M 这两个参数?
——没,我是说,你可以考虑吧Tomcat的这个参数调整小点;其实一般不设置这个参数,除非你的项目引用了太多太多的JAR包,或者用了大量的static量,从而导致非堆内存区不足彩需要加这个参数来调大。

◎ 还有,什么叫“jvm如果内存泄漏,基本都是以00M收场”?
——OOM就是Out Of Memory 的异常,简称OOM。是Java获取不到足够内存时所抛出的异常,你可以这么干来得到这个异常,在Eclipse里面写个代码,死循环不断分配一个100KB的字节数组,然后把这个字节数组add到ArrayList里面去,这样JVM就会没法GC到任何内存,最后OOM嗝屁。

◎ 当tomcat占到27%时,tomcat是这样设置的:JAVA_OPTS="-server -Xms128M -Xmx128M -Xss128k -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:PermSize=64M -XX:MaxPermSize=128M"
—— 这个配置,极限就是 128+128 = 256MB,另外再加上JVM自己占用的一些空间,总计估摸着不到300MB。而你的机器是1024MB,所以占 27% 左右也算正常。
zoutuo 2012-02-06
  • 打赏
  • 举报
回复
我对CSDN的空格处理表示很无奈-_-! 凑合看吧,红色部分表示内存的占用
zoutuo 2012-02-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ldh911 的回复:]

不是内存泄露的问题。当然我不是说你一定没有内存泄露,只是因为JVM如果内存泄露,基本都是以OOM收场的,不会泄漏到操作系统级别。

你的操作系统本身就需要内存,Tomcat启动就干掉了256+256=512,实际上你的可用内存就没多少了;只不过内存也是慢慢要上来的,不是一启动就把512M全部拿走,所以你的感觉是内存慢慢被吃没。

我建议你配置Tomcat不要太狠了,最好进一步尝试缩小内存……
[/Quote]
/*非常感谢ldh911!*/

你是说在执行jar包的时候也加上-XX:PermSize=32M -XX:MaxPermSize=32M 这两个参数?
还有,什么叫“jvm如果内存泄漏,基本都是以00M收场”?
下面是top出来的所有进程,可以看到只有tomcat、jar、mysql的内存占用是最高的。一直如此,tomcat最高的时候达到了27%,mysql和jar还没有观察过。
当tomcat占到27%时,tomcat是这样设置的:JAVA_OPTS="-server -Xms128M -Xmx128M -Xss128k -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:PermSize=64M -XX:MaxPermSize=128M"

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 10368 396 364 S 0.0 0.0 0:00.44 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd/111
3 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khelper/111
107 root 16 -4 12636 304 260 S 0.0 0.0 0:00.00 udevd
469 root 20 0 5928 476 364 S 0.0 0.0 0:00.20 syslogd
485 root 20 0 62656 920 436 S 0.0 0.1 0:00.00 sshd
493 root 20 0 21660 556 360 S 0.0 0.1 0:00.00 xinetd
505 root 20 0 11944 660 404 S 0.0 0.1 0:00.00 mysqld_safe
614 mysql 20 0 417m 69m 2716 S 0.0 6.8 0:55.84 mysqld
633 root 20 0 20884 936 368 S 0.0 0.1 0:00.25 crond
718 root 20 0 16528 608 172 S 0.0 0.1 0:00.00 nginx
720 zoutuo 20 0 17076 1728 640 S 0.0 0.2 0:06.52 nginx
721 zoutuo 20 0 17244 1748 640 S 0.0 0.2 0:06.44 nginx
4045 zoutuo 20 0 205m 39m 9312 S 0.0 3.9 0:04.12 java
4068 zoutuo 20 0 517m 218m 9m S 0.0 21.3 0:17.71 java
4203 root 20 0 85948 3336 2616 S 0.0 0.3 0:00.01 sshd
4205 zoutuo 20 0 85948 1716 984 S 0.0 0.2 0:00.00 sshd
4206 zoutuo 20 0 12080 1724 1308 S 0.0 0.2 0:00.00 bash
4228 zoutuo 20 0 12628 1192 940 R 0.0 0.1 0:00.00 top
MiceRice 2012-02-06
  • 打赏
  • 举报
回复
不是内存泄露的问题。当然我不是说你一定没有内存泄露,只是因为JVM如果内存泄露,基本都是以OOM收场的,不会泄漏到操作系统级别。

你的操作系统本身就需要内存,Tomcat启动就干掉了256+256=512,实际上你的可用内存就没多少了;只不过内存也是慢慢要上来的,不是一启动就把512M全部拿走,所以你的感觉是内存慢慢被吃没。

我建议你配置Tomcat不要太狠了,最好进一步尝试缩小内存,比如: -Xms128M -Xmx128M -XX:PermSize=64M -XX:MaxPermSize=64M。如果你的JAR包不是非常非常大的话XX:PermSize甚至32M都可以了。

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧