centos tomcat 优化 centos8和9的区别

tomcat6.0怎么修改配置文件server.xml以便启用Ajp13

你看看这个:

tomcat6_apache2.2_ajp负载均衡加集群实战

环境:

--------------------------------------------

一台apache2.2服务器,三台tomcat服务器:

apache2.2服务器

1.ip:192.168.1.20

2.只装apache软件:httpd-2.2.6.tar.bz2

安装路径:/usr/local/apache2

tomcat服务器:均配置相同的应用。

1.集群名:balancer://tomcatcluster

2.三台集群服务器ip:

IP_1:192.168.1.31

IP_2:192.168.1.32

IP_3:192.168.1.33

3.测试应用程序test文件夹放在tomcat6的webapps目录下

操作系统均为:centos 4.5_x86

jre:1.6:jdk-6u1-linux-i586-rpm.bin

tomcat6.0:编译好的二进制软件包apache-tomcat-6.0.13.tar.gz

tomcat6.0安装路径:/usr/local/tomcat6

oralce的jdbc:class12.jar

软件包存放的路径:/home/xiutuo/software/

java安装路径:/usr/java/jdk1.6.0_01

使用普通用户:xiutuo来启动tomcat6

tomcat6开机自动启动脚本:/etc/init.d/tomcat

下载路径:

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++

一:前言:

1.apache对tomcat集群支持有俩种方式:

a.通过apache2.1之后版本后内置的proxy_ajp。

b.对于apache2.1之版本则通过tomcat的jk2.0.4的mod_jk2.so:

(该版本已经停止开发)

将解压缩后的目录中的modules目录中的mod_jk2.so

文件复制到apache的安装目录下的modules目录中。

********************

俩种方式比较:

proxy_ajp配置较简单,主要表现在proxy_ajp目前只支持配置到目录,

还不支持对文件名称的pattern模式匹配

(即还不能定义到只对jsp文件起作用)。

而jk2则可配置性强,但已经停止开发

********************

官方对ajp和jk2说明:

JK2 has been put in maintainer mode and no further development will take place.

The reason for shutting down JK2 development was the lack of developers interest.

Other reason was lack of users interest in adopting JK2,

caused by configuration complexity when compared to JK.

The latest official JK2 release is 2.0.4.

JK2 will have it's successor within core Apache2.1/2.2 distribution.

We have developed new proxy_ajp that is an addition to the mod_proxy

and uses Tomcat's AJP protocol stack. It is developped in httpd-2.1

and integrated in it. We have also developed a new proxy_balancer

module for load balancing http and ajp protocol stacks.

JK will be fully supported for all other web servers.

The next JK release is planned for the end of November.

Lots of code from JK2 has been ported to JK

2.tomcat集群方式:

a.DeltaManager

--现在采用的该方式:内部机器集群少采用

b.BackupManager

********************

两种集群方式官方说明:

using the DeltaManager to replicate session deltas.

By all-to-all we mean that the session gets replicated to

all the other nodes in the cluster. This works great for smaller cluster

but we don't recommend it for larger clusters(a lot of tomcat nodes).

Also when using the delta manager it will replicate to all nodes,

even nodes that don't have the application deployed.

To get around this problem, you'll want to use the BackupManager.

This manager only replicates the session data to one backup node,

and only to nodes that have the application deployed.Downside of

the BackupManager: not quite as battle tested as the delta manager.

********************

3.负载均衡(load-balance)定义:

在服务器端短时间内获得大量的请求,单一服务器无法在一个较短的时间内响应这些请求,

此时服务器需要一个机制,请求按照多个服务器不同的负载能力,把这些请求合理的分配。

4.集群(cluster):

在多个服务器之间共享用户信息,资源等。

tomcat6_apache2.2负载均衡加集群:高可用性至高体现。

现在的带集群功能相关软件oracle10g,mysql5,tomcat等。

二:软件安装

1.apache服务器安装:

这里主要介绍apache2的源码安装

# cd/home/xiutuo/software/

# tar-zvxf httpd-2.2.6.tar.gz

# cd httpd-2.2.6

# mkdir-p/usr/local/apache2

#./configure\

--prefix=/usr/local/apache2\

--enable-modules=so\

--enable-mods-shared=all\

--enable-proxy\

--enable-proxy-connect\

--enable-proxy-ftp\

--enable-proxy-http\

--enable-proxy-ajp\

--enable-proxy-balancer

注释:这里测试用,编译了所有可用模块,并激活了tomcat集群需要的

enable-proxy,enable-proxy-http,enable-proxy-connect,enable-proxy-ajp

和enable-proxy-balancer,其中proxy-ajp和proxy-balancer必须依赖proxy,

如果是自定义的编译除了以上几个必须的模块外,mod_status也要编译进去,切记。

enable-proxy-ftp可以不编译。

# make

# make install

2.三台tomcat服务器安装

主要介绍jdk1.6u1和tomcat6的安装,三台机器重复此工作就可以了,

当然记得ip一定要设置正确。

jdk1.6安装

-------------------------------

a.卸载系统自带jdk

# rpm-e j2sdk-1.4.1-fcs

b.安装新jdk

# cd/home/xiutuo/software

进入软件包存放目录

# chmod a+x jdk-6u1-linux-i586-rpm.bin

使它有执行权限

#./jdk-6u1-linux-i586-rpm.bin

多敲几个空格,然后看到[yes]的时候输入yes,回车

然后在当前目录下就生成了jdk-6u1-linux-i586-rpm

# rpm-ivh jdk-6u1-linux-i586-rpm

c.设置环境变量

仅设置某个用户而不是所有用户可以修改~/.cshrc,~/.bash_profile文件,

追加下面一段,如果为所有用户以及以后添加的用户都加上环境变量的话,

追加/etc/profie文件.

***主意不要在profile和~/.cshrc或~/.bash_profile中重复追加**

这里:

# vi/etc/profile

//java

//如果你安装的j2sdk的路径不一样,请自行修改

JAVA_HOME=/usr/java/jdk1.6.0_01

export JAVA_HOME

CLASSPATH=/usr/java/jdk1.6.0_01/lib:/usr/java/jdk1.6.0_01/jre/lib

export CLASSPATH

PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin

export PATH

JRE=/usr/java/jdk1.6.0_01/jre

export JRE

d:立即生效

//如果你修改的是/etc/profile

# source/etc/profile

//如果你修改的是~/.cshrc

# source~/.cshrc

//如果你修改的是~/.bash_profile

# source~/.bash_profile

e:测试成功否

# java-version

Java(TM) SE Runtime Environment(build 1.6.0_01-b06)

Java HotSpot(TM) Client VM(build 1.6.0_01-b06, mixed mode, sharing)

看到这个消息,就ok啦

----------------------------------------------

tomcat6安装

tomcat6更详细的安装请看blog上tomcat文章

----------------------------------------------

a.安装tomcat,

# cd/home/xiutuo/software//进入软件包存放目录

# tar-zvxf apache-tomcat-6.0.13.tar.gz//解压

# mv apache-tomcat-6.0.13/usr/local/tomcat6//安装

# cd/usr/local/tomcat6/bin///进入安装目录

# tar-zvxf jsvc.tar.gz//解压

# cd jsvc-src//进入jsvc-src目录

# autoconf

#./configure--with-java=/usr/java/jdk1.6.0_01

# configure时切记加java的jdk路径,否则无法使用普通用户开机自动启动tomcat

# make//编译生成jsvc文件

# cp jsvc..//拷贝jsvc到上级目录

# cd..//回到上级目录

# cd/usr/local/tomcat6/

//运行下面的命令可以使tomcat以daemon方式运行

#./bin/jsvc-cp./bin/bootstrap.jar\

-outfile./logs/catalina.out\

-errfile./logs/catalina.err\

org.apache.catalina.startup.Bootstrap

b.配置oralce的jdbc

//拷贝oracle的jdbc到/usr/local/tomcat6/lib目录下

# cp/home/software/class12.jar./lib/

c.配置tomcat用户

# cd/usr/local/tomcat6/conf

# vi tomcat-users.xml

内容如下:

<?xml version='1.0' encoding='utf-8'?>

<tomcat-users>

<role rolename="tomcat"/>

<role rolename="role1"/>

<role rolename="manager"/>

<role rolename="admin"/>

<user username="tomcat" password="tomcat" roles="tomcat"/>

<user username="role1" password="tomcat" roles="role1"/>

<user username="both" password="tomcat" roles="tomcat,role1"/>

<user username="admin" password="admin" roles="admin,manager"/>

</tomcat-users>

请修改tomcat里所有定义用户的密码:即修改password为自己想要的值。

d.把应用程序文件夹test放到webapps下

3.tomcat负载均衡和集群配置

参考官方配置文档:

a.tomcat6配置文件server.xml和应用程序的web.xml

**开放负载均衡,默认使用ajp协议时使用8009端口(使用http协议时为8080端口)

**修改tomcat的 conf/server.xml的<Engine>(使用ajp协议时配置)

<!-- You should set jvmRoute to support load-balancing via AJP ie:

<Engine name="Standalone" defaultHost="localhost" jvmRoute="jvm1">

-->

<Engine name="Catalina" defaultHost="localhost">

改成

<!-- You should set jvmRoute to support load-balancing via AJP ie:

-->

<Engine name="Standalone" defaultHost="localhost" jvmRoute="tomcat1">

<!--

<Engine name="Catalina" defaultHost="localhost">

-->

说明:

第一台tomcat就把jvmRoute="tomcat1"

第二台tomcat就把jvmRoute="tomcat2"

第三台tomcat就把jvmRoute="tomcat3"

**开放集群

**修改tomcat的 conf/server.xml(使用ajp协议时配置)

在<Engine>后面或者<Host>后面简单的加上

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>

也可以加上更详细参数的集群配置内容(这是官方默认,请自行修改相关参数):

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"

channelSendOptions="8">

<Manager className="org.apache.catalina.ha.session.DeltaManager"

expireSessionsOnShutdown="false"

notifyListenersOnReplication="true"/>

<Channel className="org.apache.catalina.tribes.group.GroupChannel">

<Membership className="org.apache.catalina.tribes.membership.McastService"

address="228.0.0.4"

port="45564"

frequency="500"

dropTime="3000"/>

<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"

address="auto"

port="4000"

autoBind="100"

selectorTimeout="5000"

maxThreads="6"/>

<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">

<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>

</Sender>

<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>

<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>

</Channel>

<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"

filter=""/>

<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"

tempDir="/tmp/war-temp/"

deployDir="/tmp/war-deploy/"

watchDir="/tmp/war-listen/"

watchEnabled="false"/>

<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>

<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>

</Cluster>

***配置应用的web.xml

***在每个webapps应用中,修改配置文件web.xml文件添加元素<distributable/>

在web.xml文件中<web-app>元素下增加以下内容:

<!--此应用将与群集服务器复制Session-->

<distributable/>

具体修改如下:

修改前:

<?xml version="1.0" encoding="ISO-8859-1"?>

<web-app xmlns=""

xmlns:xsi=""

xsi:schemaLocation=" "

version="2.5">

</web-app>

修改后:

<?xml version="1.0" encoding="ISO-8859-1"?>

<web-app xmlns=""

xmlns:xsi=""

xsi:schemaLocation=" "

version="2.5">

<!--此应用将与群集服务器复制Session-->

<distributable/>

</web-app>

4.配置apache的ajp负载均衡功能,这里请务必启用反向代理。

******************************

至于其中的原理请参考官方文档说明。

正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。

正向代理还可以使用缓冲特性(由mod_cache提供)减少网络使用率。

反向代理的典型用途是将防火墙后面的服务器提供给Internet用户访问。

反向代理还可以为后端的多台服务器提供负载平衡,或为后端较慢的服务器提供缓冲服务。

另外,还可以启用高级URL策略和管理技术,从而使处于不同web服务器系统的web页面同时

存在于同一个URL空间下。

*****************************

参考文档:

tomcat6官方文档

apache中文版本

apache官方英文版本

***配置apache

***修改/usr/local/apache2/conf/httpd.conf文件

确保将以下Module的注释去掉

LoadModule proxy_module modules/mod_proxy.so

LoadModule proxy_connect_module modules/mod_proxy_connect.so

LoadModule proxy_ftp_module modules/mod_proxy_ftp.so

LoadModule proxy_http_module modules/mod_proxy_http.so

LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

LoadModule proxy_balancer_module modules/mod_proxy_balancer.so

LoadModule status_module modules/mod_status.so

并在最后面,增加

<Location/server-status>

SetHandler server-status

Order Deny,Allow

Deny from all

Allow from all

</Location>

<Location/balancer-manager>

SetHandler balancer-manager

Order Deny,Allow

Deny from all

Allow from all

</Location>

ProxyRequests Off

ProxyPass/test balancer://tomcatcluster/ stickysession=jsessionid nofailover=On

<Proxy balancer://tomcatcluster>

BalancerMember ajp://192.168.1.30:8009 loadfactor=1

BalancerMember ajp://192.168.1.31:8009 loadfactor=2

BalancerMember ajp://192.168.1.32:8009 loadfactor=3

</Proxy>

注释:

ProxyRequests Off表示启用反向代理。

ProxyPass为代理转发的Url,即将所有访问/的请求转发到

群集balancer://tomcatcluster,这里为/test即将所有访问/的请求转发到群集balancer://tomcatcluster的/test目录

BalancerMember为群集的成员,

即群集服务器1或2或3,负载均衡服务器会根据均衡规则来将请求转发给BalancerMember。

配置好后,启动Apahce服务器,访问localhost就会看到群集服务器中应用返回的结果。

访问,显示负载均衡有关信息

5.调试负载均衡集群系统

调试前务必:

先开启三台tomcat6服务器的tomcat服务!

再开启apache服务器的apache服务,切记!

a.开启tomcat服务

# cd/usr/local/tomcat6/bin

#./shutdown.sh//停止tomcat

#./start.sh//启动tomcat

查看tomcat的进程:

# ps-e| grep java

出现了java这个进程的话,说明你的tomcat起来了。

b.开启apache服务

# cd/usr/local/apache2/bin

#./apachectl configtest

//命令检查一下配置是否有误,显示Syntax OK,说明配置正确

#./apachectl stop//停止apache

#./apachectl start//启动apache

6.检验是否负载均衡集群系统成功

访问apache服务器的web服务

如果显示负载均衡有关信息则说明成功了。

接着可以访问即访问到了tomcat的test应用

7.具体的tomcat集群负载均衡优化请参考文档自行设置相关参数

具体的apache优化请参考文档自行设置相关参数

centos tomcat7 jvm 默认值是多少

我的服务器的配置:

# OS specific support.$var _must_ be set to either true or false.

JAVA_OPTS="-Xms1024m-Xmx4096m-Xss1024K-XX:PermSize=512m-XX:MaxPermSize=2048m"

正文:

常见的内存溢出有以下两种:

java.lang.OutOfMemoryError: PermGen space

java.lang.OutOfMemoryError: Java heap space

---------------------------------------------------------

这里以tomcat环境为例,其它WEB服务器如jboss,weblogic等是同一个道理。

一、java.lang.OutOfMemoryError: PermGen space

PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,

这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中,

它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对

PermGen space进行清理,所以如果你的应用中有很多CLASS的话,就很可能出现PermGen space错误,

这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar,其大小

超过了jvm默认的大小(4M)那么就会产生此错误信息了。

解决方法:手动设置MaxPermSize大小

建议:将相同的第三方jar文件移置到tomcat/shared/lib目录下,这样可以达到减少jar文档重复占用内存的目的。

二、java.lang.OutOfMemoryError: Java heap space

JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置Heap size的值,

其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn-Xms-Xmx等选项可

进行设置。Heap size的大小是Young Generation和Tenured Generaion之和。

提示:在JVM中如果98%的时间是用于GC且可用的Heap size不足2%的时候将抛出此异常信息。

提示:Heap Size最大不要超过可用物理内存的80%,一般的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值。

解决方法:手动设置Heap size

----------------------------------------------------------

Linux下修改JVM内存大小:

要添加在tomcat的bin下catalina.sh里,位置cygwin=false前。注意引号要带上,红色的为新添加的.

# OS specific support.$var _must_ be set to either true or false.

JAVA_OPTS="-Xms256m-Xmx512m-Xss1024K-XX:PermSize=128m-XX:MaxPermSize=256m"

cygwin=false

windows下修改JVM内存大小:

情况一:解压版本的Tomcat,要通过startup.bat启动tomcat才能加载配置

要添加在tomcat的bin下catalina.bat里

rem Guess CATALINA_HOME if not defined

set CURRENT_DIR=%cd%后面添加,红色的为新添加的.

set JAVA_OPTS=-Xms256m-Xmx512m-XX:PermSize=128M-XX:MaxNewSize=256m-XX:MaxPermSize=256m-Djava.awt.headless=true

情况二:安装版的Tomcat下没有catalina.bat

windows服务执行的是bin/tomcat.exe.他读取注册表中的值,而不是catalina.bat的设置.

修改注册表HKEY_LOCAL_MACHINE/SOFTWARE/Apache Software Foundation/Tomcat Service Manager/Tomcat5/Parameters/JavaOptions

原值为

-Dcatalina.home="C:/ApacheGroup/Tomcat 5.0"

-Djava.endorsed.dirs="C:/ApacheGroup/Tomcat 5.0/common/endorsed"

-Xrs

加入-Xms300m-Xmx350m

重起tomcat服务,设置生效

---------------------------------------------------------

各参数的比例:

Xmx与PermSize的和不可超过JVM可获得的总内存

PermSize不可大于Xmx

================

如何设置Tomcat的JVM虚拟机内存大小

可以给Java虚拟机设置使用的内存,但是如果你的选择不对的话,虚拟机不会补偿。可通过命令行的方式改变虚拟机使用内存的大小。如下表所示有两个参数用来设置虚拟机使用内存的大小。

参数

描述

-Xms

JVM初始化堆的大小

-Xmx

JVM堆的最大值

这两个值的大小一般根据需要进行设置。初始化堆的大小执行了虚拟机在启动时向系统申请的内存的大小。一般而言,这个参数不重要。但是有的应用程序在大负载的情况下会急剧地占用更多的内存,此时这个参数就是显得非常重要,如果虚拟机启动时设置使用的内存比较小而在这种情况下有许多对象进行初始化,虚拟机就必须重复地增加内存来满足使用。由于这种原因,我们一般把-Xms和-Xmx设为一样大,而堆的最大值受限于系统使用的物理内存。一般使用数据量较大的应用程序会使用持久对象,内存使用有可能迅速地增长。当应用程序需要的内存超出堆的最大值时虚拟机就会提示内存溢出,并且导致应用服务崩溃。因此一般建议堆的最大值设置为可用内存的最大值的80%。

Tomcat默认可以使用的内存为128MB,在较大型的应用项目中,这点内存是不够的,需要调大。

Windows下,在文件/bin/catalina.bat,Unix下,在文件/bin/catalina.sh的前面,增加如下设置:

JAVA_OPTS='-Xms【初始化内存大小】-Xmx【可以使用的最大内存】'

需要把这个两个参数值调大。例如:

JAVA_OPTS='-Xms256m-Xmx512m'

表示初始化内存为256MB,可以使用的最大内存为512MB。

另外需要考虑的是Java提供的垃圾回收机制。虚拟机的堆大小决定了虚拟机花费在收集垃圾上的时间和频度。收集垃圾可以接受的速度与应用有关,应该通过分析实际的垃圾收集的时间和频率来调整。如果堆的大小很大,那么完全垃圾收集就会很慢,但是频度会降低。如果你把堆的大小和内存的需要一致,完全收集就很快,但是会更加频繁。调整堆大小的的目的是最小化垃圾收集的时间,以在特定的时间内最大化处理客户的请求。在基准测试的时候,为保证最好的性能,要把堆的大小设大,保证垃圾收集不在整个基准测试的过程中出现。

如果系统花费很多的时间收集垃圾,请减小堆大小。一次完全的垃圾收集应该不超过 3-5秒。如果垃圾收集成为瓶颈,那么需要指定代的大小,检查垃圾收集的详细输出,研究垃圾收集参数对性能的影响。一般说来,你应该使用物理内存的 80%作为堆大小。当增加处理器时,记得增加内存,因为分配可以并行进行,而垃圾收集不是并行的。

Tomcat 5常用优化和配置

1、JDK内存优化:

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

JAVA_OPTS='-Xms[初始化内存大小]-Xmx[可以使用的最大内存]

一般说来,你应该使用物理内存的 80%作为堆大小。

2、连接器优化:

在tomcat配置文件server.xml中的配置中,和连接数相关的参数有:

maxThreads:

Tomcat使用线程来处理接收的每个请求。这个值表示Tomcat可创建的最大的线程数。默认值150。

acceptCount:

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

minSpareThreads:

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

maxSpareThreads:

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

enableLookups:

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

connnectionTimeout:

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

maxKeepAliveRequests:

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

bufferSize:

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

compression:

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

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

3、tomcat中如何禁止和允许列目录下的文件

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

<servlet>

...

< init-param>

< param-name>listings</param-name>

< param-value>false</param-value>

</init-param>

...

</servlet>

4、tomcat中如何禁止和允许主机或IP地址访问

<Host name="localhost"...>

...

< Valve className="org.apache.catalina.valves.RemoteHostValve"

allow="*.mycompany.com,www.yourcompany.com"/>

< Valve className="org.apache.catalina.valves.RemoteAddrValve"

deny="192.168.1.*"/>

...

</Host>

服务器的配置

JAVA_OPTS='-server-Xms512m-Xmx768m-XX:NewSize=128m-XX:MaxNewSize=192m-XX:SurvivorRatio=8'

记录一次云服务器(Centos7)JVM内存调优过程

一台配置了4G内存的云服务器,运行着YDService、nginx、tomcat、node、vue、mysql、redis、nacos以及gateway服务。在部署了包含console、mobile、commonService三个业务服务后,发现服务器内存占用率超过90%,导致nacos服务被强制挤下线,进而影响了业务服务的可用性。通过使用top命令查看服务器内存占用情况,并通过jps命令查找具体进程号,发现xmx参数设置约为1G。初步分析结果显示,三个业务服务占用内存过高,引发了内存不足的问题。

为了解决这一问题,需要分析各业务服务的具体承载强度,按需分配内存,并使用带内存配置参数的启动命令来启动服务。将核心业务集中到commonService模块处理,而console和mobile模块则通过feign进行RPC调用commonService服务,以减少内存消耗。针对非核心业务模块,console和mobile模块配置内存参数为-Xms128M-Xmx256M-XX:PermSize=128M-XX:MaxPermSize=256M。

实施解决方案后,业务服务运行恢复正常,客户端及移动端功能也得以保持正常运行。nacos服务运行稳定,服务器内存占用率保持在85%左右,问题得到了有效解决。

为了帮助大家更好地理解如何管理JVM内存和优化服务内存使用,文章中还详细介绍了jps和jmap等常用命令的使用方法。这些命令对于监控和调试JVM内存使用、分析内存状态以及生成dump文件等场景非常有用。通过这些工具,可以更直观地理解内存使用情况,从而采取更有效的内存管理策略。

阅读剩余
THE END