修改服务器tomcat虚拟机内存大小

因为项目需要导入数据,数据量比较大,就oom了,说是修改虚拟机内存大小,但是在网上找了很多都说是在catalina.dat里加上 JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m
但是加了之后没起作用,或者怎么看有没有起作用

你好,配置完成,关闭tomcat,要注意有没有报错,有的版本和jdk不支持会报错。如果没有报错,启动tomcat服务。进入tomcat管理界面,初始化,必须配置tomcat-user.xml
步骤如下:
1、启动tomcat
2、访问 http://localhost:8080/manager/status ,并输入您在安装tomcat时输入的用户与口令,如 admin ,密码 admin(密码是您在tomcat安装时输入的)

注:添加用户,修改conf/tomcat-users.xml

<?xml version='1.0' encoding='utf-8'?>









3、进入了Server Status页面,可以在JVM表格中看到
Free memory: 241.80 MB Total memory: 254.06 MB Max memory: 508.06 MB

上面的文字即代表了,当前空闲内存、当前总内存、最大可使用内存三个数据。
确定了最大内存足够大时,tomcat即可正常运转

最后总结下内存设置中常用的几个参数

(1)-Xms,jvm启动时,初始分配的堆/栈内存

(2)-Xmx,JVM最大允许分配的堆/栈内存,按需分配
(3)-Xss,设定每个线程的堆栈大小

(4)-XX:PermSize,JVM初始分配的非堆内存

(5)-XX:MaxPermSize,JVM最大允许分配的非堆内存,按需分配

举例:

-Xms256m -Xms512m -XX:PermSize=64m -XX:MaxPermSize=128m

欢迎采纳

JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m
参数还是太小了,还要继续调大,这个参数是方法区内存大小为64M-128M,也就是说最大才是128M
调大到JAVA_OPTS="-server -XX:PermSize=128M -XX:MaxPermSize=256M

这只是方法区内存大小,应该还需要调节堆内存的大小-Xms512m -Xms1024m

应该设置 -Xmx 参数的值,不是PermSize 非堆内存

加上这句话,只是能解决防止出现服务内存溢出,之前我试过,在本地一直内存溢出,后来这么配置,成功的解决。
不过可以用java查看内存堆信息:

Runtime run = Runtime.getRuntime();
System.in.read(); // 暂停程序执行

// System.out.println("memory> total:" + run.totalMemory() + " free:" + run.freeMemory() + " used:" + (run.totalMemory()-run.freeMemory()) );
run.gc();
System.out.println("time: " + (new Date()));
// 获取开始时内存使用量
long startMem = run.totalMemory()-run.freeMemory();
System.out.println("memory> total:" + run.totalMemory() + " free:" + run.freeMemory() + " used:" + startMem );

String str = "";
for(int i=0; i<50000; ++i){
str += i;
}

System.out.println("time: " + (new Date()));
long endMem = run.totalMemory()-run.freeMemory();
System.out.println("memory> total:" + run.totalMemory() + " free:" + run.freeMemory() + " used:" + endMem );
System.out.println("memory difference:" + (endMem-startMem));
/*
run.gc();
System.out.println("memory> total:" + run.totalMemory() + " free:" + run.freeMemory() + " used:" + (run.totalMemory()-run.freeMemory()) );
*/