我有 Tomcat ,已配置XMS=XMX
(4G)。
但是 - 如果我将XMS
设置为1G,该怎么办?
据我所知 - JVM 将以提供的1G内存启动 Tomcat 。然后,如果应用程序需要更多 - JVM 将在一段时间内将其提升至4G。要提升它 - Java 必须运行一些操作(调整大小,重新定位内存中的页面?) - 这需要一些时间和CPU资源,对吗?
Tomcat 的应用程序不需要这么多内存后发生了什么? Java 会再次运行操作以减少已用内存吗?
感谢。
P.S。为什么我要问 - XMS=1G
和XMX=4G
Apache Jmeter 给出的结果比{I} Throughput
和Average
少得多开始 Tomcat ,XMX
和XMS
都是4G。
答案 0 :(得分:2)
是的,JVM必须分配更多内存并重新安排所有堆空间(Eden,from,to,old和PermGen)以适应新内存。如果您计划让您的webapp使用一定数量的堆空间,那么最好在性能方面预先分配整个堆。
一旦JVM完成,它将永远不会释放它从操作系统中获取的内存。因此,如果您需要4GiB堆并且JVM最终需要它,那么您的堆将保持在4GiB,直到JVM终止。
答案 1 :(得分:1)
将Xms和Xmx设置为相等的值时JVM不必调整堆大小并避免JVM花费的时间。 这将为您的情况提供更好的结果,因为使用Jmeter,您正在强调需要增加堆的服务器。一旦你使用Jmeter,你的Tomcat将在一些垃圾收集器活动之后减少堆,这会破坏未被攻击的对象。