一个java服务器应用程序必须留给操作系统多less内存?

假设我正在运行-Xms256m -Xmx1024m的tomcat,但是想增加我的堆使用率。

什么是我可以分配的最大的安全堆大小?

为了这个问题的目的,请假设,系统有5GB的RAM,是z / Linux系统。 但是,如果可能的话,我想要一个更广泛的经验法则的答案。

另外,如果这是重复的,对不起。 我很惊讶,我没有find关于这种事情的更多信息。

不是重复的:我看着这里 ,但是,他的答案似乎只是一个猜测,没有备份。 在这个问题上的其他答案不是很清楚和/或具体到我的问题。 1)我不是在一个窗口32位系统上,2)我没有问PermGen,虽然可能会提到一个很好的答案,3)第三个答案的确说“最后,你还必须考虑到其他在服务器上运行的东西,也需要RAM“,但这不是一个确切的答案。 我现在只是担心内存的操作系统使用情况。

编辑:这是专用的系统,所以我最担心的操作系统内存使用情况。 我不担心其他程序。

GC

您希望分配的最大堆大小将取决于您的系统使用自己的资源,您正在运行的其他服务等。您希望分配一个堆大小,为操作系统留下足够的可用内存,以防止不必要的内存分页。 这在Windows中是一个更大的问题,但是Linux中也存在这个问题(我比Windows更像Windows专家,所以对此感到抱歉)。

首先,你想检查你的系统的资源利用率: http : //www.cyberciti.biz/faq/linux-check-memory-usage/

接下来,你想看看你的页面文件是如何configuration的: http : //www.cyberciti.biz/faq/linux-check-the-size-of-pagesize/

然后,您将不得不根据您之前收集的信息尝试不同的configuration,并观察页面文件的使用情况: http : //www.cyberciti.biz/faq/linux-check-swap-usage-command/

如果你的页面文件被大量使用,那么你的堆大小太大了。 如果使用量很less,或者根本没有使用,则可以尝试增加堆大小以提高性能(实际的性能结果在不同的Java应用程序中会有所不同,而堆大小的增加会使某些应用程序的性能变差,被编程)。

您要确保分配适当数量的内存,以便您的操作系统具有足够的可用RAM来轻松维护页面文件,并且您的应用程序有足够的内存分配给它。 在Windows中,我尝试在负载下保持至less25%的可用RAM。 我会尝试不同的configuration,并观察您的系统性能。

还有一个重要注意事项:在Java 8中,您根本不需要定义这些项目,Java 8似乎更擅长维护这些值,而不是静态分配它们。