Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SpringWeb应用程序内存分析质疑_Java_Spring_Maven Jetty Plugin_Memory Profiling - Fatal编程技术网

Java SpringWeb应用程序内存分析质疑

Java SpringWeb应用程序内存分析质疑,java,spring,maven-jetty-plugin,memory-profiling,Java,Spring,Maven Jetty Plugin,Memory Profiling,我有一个Spring应用程序,它使用top命令在AmazonEC2小实例(1.7GBRAM)上显示以下数据- 这只需要446MB的内存来启动软件,我有大约350个类,还有Maven作为依赖项引入的库 free -m total used free shared buffers cached Mem: 1656 1642 14 0 34

我有一个Spring应用程序,它使用top命令在AmazonEC2小实例(1.7GBRAM)上显示以下数据-

这只需要446MB的内存来启动软件,我有大约350个类,还有Maven作为依赖项引入的库

free -m 

             total       used       free     shared    buffers     cached
Mem:          1656       1642         14          0         34        519
-/+ buffers/cache:       1088        568
Swap:          895         12        883
Maven-Spring依赖性就在那里-

Spring Core, Spring MVC, Spring Data , Spring Data Rest, , Spring
Security, Spring HATEOAS, Spring Boot, Spring Oauth , Spring-Vaadin
我将这个内存占用量与jenkins进行了比较,jenkins总共占用了277 MB的内存,但是我的测试应用程序显然占用了+400 MB的内存,没有运行任何明显的功能

此时,代码只有实体和Spring数据Rest。 我做了一个堆转储分析,结果显示hibernate作为应用程序的顶级使用者花费了15 MB的PID(使用jmap)

MAT展会上最大的顶级霸主级装载机报告-

org.eclipse.jetty.webapp.WebAppClassLoader @ 0xf00f8bb0  - 45 MB - 56.91%
  • SpringWeb应用程序是否只需花费+400MB 当上述库作为依赖项添加并运行时启动 使用mvn jetty:运行
  • 这里,jmap将堆占用率显示为77mb,尽管top命令显示+400 MB,为什么它们不匹配,因为它们都用于相同的PID 5019
  • 很难仅基于库进行评估,因为这取决于jvm设置、应用程序的处理方式、与引导相关的代码是否有效地使用了内存等?对于具有这些依赖项的应用程序,400mb听起来很正常

  • 堆占用率只是代码和库使用的内存部分。jvm也需要内存才能运行。另外,在分配内存时,您的操作系统可能有其自身的复杂性

  • 您可以尝试调整各种jvm堆内存设置(请参阅)。一些非常常见的设置是-Xmx-Xms-XX:MaxPermSize

    我的建议是使用一些jvm评测工具,它可以为您提供一个堆使用率图(例如:visualvm),确保堆消耗量不会上升(寻找锯齿模式),然后您可以确定需要多少并调整VM参数

    Used heap dump  76.9 MB
    Number of objects   1,785,039
    Number of classes   12,546
    Number of class loaders 245
    Number of GC roots  2,589
    Format  hprof
    
    org.eclipse.jetty.webapp.WebAppClassLoader @ 0xf00f8bb0  - 45 MB - 56.91%