Java JVM设置对性能的影响

一台后端server,OS为Slackware 8.1,装了tomcat 4.1.30,近期在繁忙时期经常会死机,死状就是"java.lang.OutOfMemoryError: unable to create new native thread".是tomcat创建不了新的线程来应答请求了。于是我搭了一个环境专门来测试这个问题。内存为2G,CPU为四颗2.8G,tomcat 4.1.30,写一个最简单的JSP页面,如下:

代码

  <%
   try
   {
   Thread.sleep(30000);
   out.println("fuck");
   } catch (InterruptedException e) {
   e.printStackTrace();
   } %>

然后开Jmetor来压,同时开jconsole来监测tomcat的情况,并不断调整XMX,XMS,XSS这三个参数,得出下表:

  XMX XMS XSS down时的tomcat thread数
   500M 500M 128K 642
   800M 800M 64K 485
   1024M 1024M 64K 374
   1024M 1024M 128K 374
   1024M 1024M 512K 371

根据该表,可以看出,随XMX,即是分配给JVM的内存数越大,tomcat所能开的thread数就越小,而Xss这个参数几乎不影响任何测试结果。我猜想tomcat开线程是使用linux的内存,而不是JVM的内存。当分配给JVM的内存越大,操作系统所能用于分配的内存就越小,于是所能开的线程数就越小。

大家有什么解决方案吗?难道大家都没遇过这个问题?我的设想是可能linux初始每个进程(也就是tomcat开的线程)有一个初始大小,这应该是一个内核参数来的,应该把它调小就可以了,但我不知道怎样去调。

时间: 2025-01-21 14:00:22

Java JVM设置对性能的影响的相关文章

JAVA异常是否对于性能有影响

  在对OneAPM的客户做技术支持时,我们常常会看到很多客户根本没意识到的异常.在消除了这些异常之后,代码运行速度与以前相比大幅提升.这让我们产生一种猜测,就是在代码里面使用异 常会带来显著的性能开销.因为异常是错误情况处理的重要组成部分,摒弃是不太可能的,所以我们需要衡量异常处理对于性能影响,我们可以通过一个实验看看异常处理的对于性能的影响. 实验 我的实验基于一段随机抛出异常的简单代码.从科学的角度,这并非完全准确的测量,同时我也并不了解HotSpot 编译器会对运行中的代码做何动作.但无

轻松掌握Informix多方面的参数设置对性能的影响

注释:(应使用原始磁盘空间,不要使用文件系统空间. ) 原始磁盘空间意味着通过一个字符模式特殊文件(在ls -l 命令显示的第一列总出现的一个'c')访问一个原始磁盘分区,不是指磁盘空间相关联的块模式特殊文件(为ls -l 命令显示的第1列为'b'),也不是指卷管理控制设备以及其它任何不是原始磁盘分区的设备. 更新统计 这是十分重要的.当相关各列上的数值分布发生明显变化时,适时运行UPDATE STATISTICS命令后能使数据分布和统计数据得到更新. 对建有索引的列运行UPDATE STATI

浅谈JAVA 异常对于性能的影响_java

在对客户做技术支持时,我们常常会看到很多客户根本没意识到的异常.在消除了这些异常之后,代码运行速度与以前相比大幅提升.这让我们产生一种猜测,就是在代码里面使用异常会带来显著的性能开销.因为异常是错误情况处理的重要组成部分,摒弃是不太可能的,所以我们需要衡量异常处理对于性能影响,我们可以通过一个实验看看异常处理的对于性能的影响. 实验 我的实验基于一段随机抛出异常的简单代码.从科学的角度,这并非完全准确的测量,同时我也并不了解HotSpot 编译器会对运行中的代码做何动作.但无论如何,这段代码应该

JAVA 异常对于性能的影响

在对OneAPM的客户做技术支 持时,我们常常会看到很多客户根本没意识到的异常.在消除了这些异常之后,代码运行速度与以前相比大幅提升.这让我们产生一种猜测,就是在代码里面使用异 常会带来显著的性能开销.因为异常是错误情况处理的重要组成部分,摒弃是不太可能的,所以我们需要衡量异常处理对于性能影响,我们可以通过一个实验看看异 常处理的对于性能的影响. 实验 我的实验基于一段随机抛出异常的简单代码.从科学的角度,这并非完全准确的测量,同时我也并不了解HotSpot 编译器会对运行中的代码做何动作.但无

在Unix/Linux上令(java)JVM支持中文输出

unix|中文 原文: 在Unix/Linux上令(java)JVM支持中文输出 一.在Unix/Linux上令JVM支持中文输出 如果用户使用的是UNIX的远程服务器,就会遇到中文字体在图像中输出的问题,特别是由于许多管理员并不喜欢把主机的locale定为zh(因为意味着可能出乱码或必须装微形图形终端象zhcon,但很多情况下这样的条件并不具备).大部分程序员的JAVA经验苟限于JSP脚本程序,部分熟练的程序员大概开发过中间件.servlet.applet或在WINDOWS上运行的GUI程序.

Java并发编程之性能、扩展性和响应_java

本文讨论的重点在于多线程应用程序的性能问题.我们会先给性能和扩展性下一个定义,然后再仔细学习一下Amdahl法则.下面的内容我们会考察一下如何用不同的技术方法来减少锁竞争,以及如何用代码来实现. 1.性能 我们都知道,多线程可以用来提高程序的性能,背后的原因在于我们有多核的CPU或多个CPU.每个CPU的内核都可以自己完成任务,因此把一个大的任务分解成一系列的可彼此独立运行的小任务就可以提高程序的整体性能了.可以举个例子,比如有个程序用来将硬盘上某个文件夹下的所有图片的尺寸进行修改,应用多线程技

Oracle中利用DETERMINISTIC声明提高性能(二) 参数顺序对性能的影响

虽然Oracle提供的DETERMINISTIC声明,本意是确保函数的确定性,但是如何合理利用,是可以用来提高性能的. 这一篇描述参数顺序对性能的影响. 上一篇文章提到了,如果希望通过DETERMINISTIC来获取性能收益,那么采用批量方式是必须的,而且数组的值相对而言越大对于性能的帮助会越大. 但是这里存在一个问题,如果需要处理的数据量本身很大,虽然重复的输入参数不少,但是总的参数不同的值更多,那么即使将ARRAY的值设置到1000,能带来的性能收益也很有限,因为即使1000次调用,也不能保

Oracle中利用DETERMINISTIC声明提高性能(一) ARRAY对性能的影响

虽然Oracle提供的DETERMINISTIC声明,本意是确保函数的确定性,但是如何合理利用,是可以用来提高性能的. 这一篇描述ARRAY对性能的影响. 关于DETERMINISTIC函数,以前已经写过一些文章了,不过对于DETERMINISTIC声明用来提高性能只是简单提了一句,并没有展开来说. 由于函数声明了DETERMINISTIC特性,Oracle对于相同的输入,可以只运行一次,而这对于代码比较复杂,调用时间较长的函数而言,确实可以提高性能. 但是在上面的几篇文章中也提到了,DETER

Java Web服务: WS-SecureConversation性能

看看 Web 服务栈 WS-SecureConversation 性能相比较有何不同 简介:WS-SecureConversation 能让您保证正在进行的 Web 服务消息交换的安全,同时花费比普通 WS-Security 更少的处理开销.在本文中,您将学习如何配置 WS-SecureConversation 并将其用于三个 主要的开源 Java Web 服务栈:Apache Axis2.Metro 和 Apache CXF.还将看到这三个栈的 WS -SecureConversation 性