linux tomcat jvm内存 多少合适

linux tomcat jvm内存 多少合适,第1张

为了解决tomcat在进行大并发请求时,出现内存溢出的问题,请修改tomcat的内存大小,其中分为以下两种方式:

一、使用 catalina.bat 等命令行方式运行的 tomcat

查看系统是否能支持所填最大内存命令:java -Xmx1024m -version,当所填值不合法时,执行该命令将报错

1、修改 tomcat\bin\Catalina.bat 文件

windows环境下:

在166行左右

rem Execute Java with the applicable properties ”以下每行

%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%

在 %DEBUG_OPTS% 后面添加-Xms256m -Xmx512m

linux环境下:

打开在Tomcat的安装目录的bin文件的catalina.sh文件,进入编辑状态.

在注释后面加上如下脚本:

JAVA_OPTS='-Xms512m -Xmx1024m'

JAVA_OPTS="$JAVA_OPTS -server -XX:PermSize=64M -XX:MaxPermSize=256m"

其中 JAVA_OPTS='-Xms512m -Xmx1024m' 是设置Tomcat使用的内存的大小.

-XX:PermSize=64M -XX:MaxPermSize=256m 指定类空间(用于加载类)的内存大小

保存后,重新以命令行的方式运行 tomcat ,即可,然后通过最后面介绍的如何观察tomcat现有内存情况的方法进行查看是否已经变更成功。

二、使用 系统中的 “服务”,或者开始菜单的可执行程序运行的tomcat

1、关闭 现在正在运行的tomcat

2.1 [注意]

[高版本tomcat配置方法]

如果是tomcat 5.5 或者是 5.0.28 之后的版本,在 Java 选项卡中,下方,会有

Inital memory Pool:

Maximum memory Pool:

Thread stack size:

三个输入框,在这里即可不用做上面的 *** 作,直接配置内存大小,只需要设置

Inital memory Pool 为 256

Maximum memory Pool 为 512

点击确定后,重启tomcat 生效

如果您是低版本的tomcat,发现没有上面那几个录入框,请看下面的 *** 作步骤

[低版本tomcat配置方法]

在开始菜单中,找到“Apache Tomcat 5.0”,并选择“Configure Tomcat”,在d出的对话框窗口中,切换到 Java VM 选项卡,并在 Java Options 输入框的最前面输入

-Xms256m -Xmx512m

即输入框中的内容会像下面的代码(与自己的环境有所区别)

-Xms256m -Xmx512m

-Dcatalina.home="C:\tomcat5"

-Djava.endorsed.dirs="C:\tomcat5\common\endorsed"

-Xrs

设置完后,点击“确定”,并重启tomcat即可。

三、查看现有tomcat的内存大小情况

1、启动tomcat

2、访问 ,并输入您在安装tomcat时输入的用户与口令,如 admin ,密码 admin(密码是您在tomcat安装时输入的)

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

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 web应用开发的过程中,tomcat这个服务器是经常用到的,而它的性能情况直接影响了web应用的效率,提高tomcat的JVM的内存,能提高它的效率,下面介绍下如何设置tomcat的JVM虚拟机内存大小:

1、Tomcat作为应用服务器,不能直接运行,需要相应的硬件和 *** 作系统的支持,,需要java虚拟机环境。也就是说tomcat启动的时候 ,JVM会分配一个初始内存以及最大内存给 tomcat,所以要提高tomcat的jvm内存,需要在启动的时候,进行配置。

2、找到tomcat在本地电脑中的安装目录,进入这个目录,然后进入bin目录中,在window环境下找到bin目录中的catalina.bat,在linux环境下找到catalina.sh。

3、右键编辑catalina.bat这个文件,找到JAVA_OPTS这个选项的位置,这个参数是java启动的时候,需要的启动参数。

4、将这个参数设置为JAVA_OPTS='-Xms512m -Xmx1024m'表示初始化分配内存为512MB,可以使用的最大内存为1024MB。

5、也可以在 *** 作系统的环境变量中对JAVA_OPTS进行设置,因为tomcat在启动的时候,也会读取 *** 作系统中的环境变量的值,进行加载。

6、如果是修改了 *** 作系统的环境变量,需要重启机器,再重启tomcat,如果修改的是tomcat配置文件,需要将配置文件保存,然后重启tomcat,设置就能生效了。

要部署使用tomcat,则必须了解tomcat的目录结构以及各目录的作用。这里以tomcat7为例,进入tomcat安装目录下:

前端请求被tomcat直接接收或者由前端的代理,通过HTTP,或者AJP代理给Tomcat,此时请求被tomcat中的connector接收,不同的connector和Engine被service组件关联起来,在一个Engine中定义了许多的虚拟主机,由Host容器定义,每一个Host容器代表一个主机,在各自的Host中,又可以定义多个Context,用此来定义一个虚拟主机中的多个独立的应用程序。

Tomcat Server的结构图如下:

看上去很复杂。其实,大部分都是注释。下面是一个简图说明了各组件之间的关系!

上面列出的比较常用的组件元素,server.xml文件中可定义的元素非常多,包括Server, Service, Connector, Engine, Cluster, Host, Alias, Context, Realm, Valve, Manager, Listener, Resources, Resource, ResourceEnvRef, ResourceLink, WatchedResource, GlobalNameingResources, Store, Transaction, Channel, Membership, Transport, Member, ClusterListener等等。

由以上配置不难看出存在的一个问题。如果我们想要对其中一个应用程序的配置做一些修改,那么就必须重新启动tomcat,那样势必就会影响到另外两个应用程序的正常服务。因此以上配置是不适合线上使用的, 因此需要将其配置为多实例,每个实例只跑一个独立的应用程序,那样我们应用程序之间就不会在互相受到影响。 但是我们将面临这样一个问题,80端口只能被一个HTTP/1.1 Connector监听,而三个tomcat实例则至少需要3个HTTP/1.1 Connector,这样我们就 需要一个前端代理做分发处理,接收HTTP 80端口的请求,按域名通过每个tomcat实例的AJP/1.3 Connector传递请求 。而前端的代理选择apache,基于这样的思路,我们还可以做到tomcat的负载均衡,而且 apache会将接收的HTTP超文本传输报文重新封装成二进制格式通过AJP/1.3 协议传递给后端的tomcat处理 ,在效率上也是有明显的提升。

这会让Tomcat启动一个server实例(即一个JVM),它监听在8005端口以接收shutdown命令。各Server的定义不能使用同一个端口,这意味着如果在同一个物理机上启动了多个Server实例,必须配置它们使用不同的端口。这个端口的定义用于为管理员提供一个关闭此实例的便捷途径,因此,管理员可以直接telnet至此端口使用SHUTDOWN命令关闭此实例。不过,基于安全角度的考虑,这通常不允许远程进行。

该元素代表整个容器,是Tomcat实例的顶层元素。由org.apache.catalina.Server接口来定义。它包含一个或多个<Service>元素。并且它不能做为任何元素的子元素。

Service主要用于关联一个引擎和与此引擎相关的连接器,每个连接器通过一个特定的端口和协议接收入站请求交将其转发至关联的引擎进行处理。因此,Service要包含一个引擎、一个或多个连接器。

该元素由org.apache.catalina.Service接口定义,它包含一个<Engine>元素,以及一个或多个<Connector>,这些Connector元素共享用同一个Engine元素。

Engine是Servlet处理器的一个实例,即servlet引擎,默认为定义在server.xml中的Catalina。

每个Service元素只能有一个Engine元素。元素处理在同一个<Service>中所有<Connector>元素接收到的客户请求。由org.apahce.catalina.Engine接口定义。

位于Engine容器中用于接收请求并进行相应处理的主机或虚拟主机。

它由Host接口定义。一个Engine元素可以包含多个<Host>元素。每个<Host>的元素定义了一个虚拟主机。它包含了一个或多个Web应用<Context>。

Context在某些意义上类似于apache中的路径别名,一个Context定义用于标识tomcat实例中的一个Web应用程序。

它由Context接口定义。是使用最频繁的元素。每个<Context>元素代表了运行在虚拟主机上的单个Web应用。一个<Host>可以包含多个<Context>元素。每个web应用有唯一的一个相对应的Context代表web应用自身。servlet容器为第一个web应用创建一个 ServletContext对象。

由Connector接口定义。<Connector>元素代表与客户程序实际交互的组件,它负责接收客户请求,以及向客户返回响应结果。

进入Tomcat的请求可以根据Tomcat的工作模式分为如下两类:

Tomcat应该考虑工作情形并为相应情形下的请求分别定义好需要的连接器才能正确接收来自于客户端的请求。一个引擎可以有一个或多个连接器,以适应多种请求方式。

定义连接器可以使用多种属性,有些属性也只适用于某特定的连接器类型。一般说来,常见于server.xml中的连接器类型通常有4种:

Connector元素共用属性:

HttpConnector元素的属性:

AJP Connector的属性:

即一个service配置多个端口,项目可以通过多个端口访问。 修改tomcat-home\conf下的server.xml,在Service下配置多个<Connector>即可。

在这个应用里,可以用8080端口号访问服务,也可以用8099端口号来访问服务服务放置的路径由host决定,上例中服务放在webapps下。

即配置多个service,每个service可以配置多个端口。修改tomcat-home\conf下的server.xml,添加多个Service即可。

注意:Service name、Engine name、appBase,端口号别忘了修改,以免重复。

以上三个service,发布的路径不同,项目分别发布在webapps、webapps1、webapps2下,访问不同的项目的方法:

在$CATALINA_HOME/conf/server.xml配置文件中的Connetctor节点,和连接数相关的参数配置和优化。

Tomcat使用线程来处理接收的每个请求。这个值表示Tomcat可创建的最大的线程数。默认值200。 可以根据机器的时期性能和内存大小调整,一般可以在400-500 。最大可以在800左右。

指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理。默认值10。

Tomcat初始化时创建的线程数。默认值4。

一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。默认值50。

是否反查域名,默认值为true。 为了提高处理能力,应设置为false

网络连接超时,默认值20000,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。 通常可设置为30000毫秒

保持请求数量,默认值100。

输入流缓冲大小,默认值2048 bytes。

压缩传输,取值on/off/force,默认值off。

其中和最大连接数相关的参数为maxThreads和acceptCount。 如果要加大并发连接数,应同时加大这两个参数 web server允许的最大连接数还受制于 *** 作系统的内核参数设置 ,通常Windows是2000个左右,Linux是1000个左右。

配置示例:

Tomcat默认可以使用的内存为128MB,Windows下,在文件{tomcat_home}/bin/catalina.bat,Unix下,在文件$CATALINA_HOME/bin/catalina.sh的前面,增加如下设置:

一般说来,你应该使用物理内存的 80% 作为堆大小。如果本机上有Apache服务器,可以先折算Apache需要的内存,然后修改堆大小。 建议设置为70%;建议设置[初始化内存大小]等于[可以使用的最大内存],这样可以减少频繁分配堆而降低性能。

在$CATALINA_HOME/conf/web.xml中,把listings参数设置成false即可,如下:

参考

WEB请求处理四:Tomcat配置实践


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8947736.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-23
下一篇2023-04-23

发表评论

登录后才能评论

评论列表(0条)

    保存