容器化JVM系统Dubbo参数配置 经验总结

容器化配置

JDK 1.8 JVM参数

对于无大量代理类和需要装载大量第三方外部包的情况下,元空间需要设置一个上限值,并且建议MetaspaceSize值等于MaxMetaspaceSize值,防止触发容器被直接kill掉,具体原因可参考https://blog.csdn.net/u011381576/article/details/79635867
老年代预留128M(根据是否使用大缓存修改)

容器配置类型(2C 2.5G)
-Xms2048m -Xmx2048m -Xmn1920m -Xss256k -XX:MetaspaceSize=64m  -XX:MaxMetaspaceSize=64m -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:LargePagwSizeInBytes=128m –Denv=Test
-XX:UseFastAccessorMethods –XX:UseCMSInitiatingOccupancyOnly –XX:CMSInitiatingOccupancyFraction=70 –XX:+HeapDupOnOutOfMemoryError –XX:+DisableExplicitGC –XX:HeapDumpPath=/log/dump/服务名/容器IP/
-XX:+PrintGCDetails –XX:+PrintGCDateStamps –XX:+printGCTimeStamps –XX+UseGCLOgFileRotation –XX:NumberOfGCLogFiles=10 –XX:GCLOgFileSize=5M –Xloggc:/log/dump/服务名/容器IP/gc.log
容器配置类型(4C 4.5G)

对于无需动态生成类的情况下,元空间需要设置一个上限值,并且建议MetaspaceSize值等于MaxMetaspaceSize值,防止触发容器被直接kill掉,具体原因可参考(https://blog.csdn.net/u011381576/article/details/79635867)
老年代预留128M(根据是否使用大缓存修改)

-Xms4096m –Xmx4096m –Xmn3968m –Xss256K -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:LargePagwSizeInBytes=128m –Denv=Test
-XX:UseFastAccessorMethods –XX:UseCMSInitiatingOccupancyOnly –XX:CMSInitiatingOccupancyFraction=70 –XX:+HeapDupOnOutOfMemoryError –XX:+DisableExplicitGC –XX:HeapDumpPath=/log/dump/服务名/容器IP/
-XX:+PrintGCDetails –XX:+PrintGCDateStamps –XX:+printGCTimeStamps –XX+UseGCLOgFileRotation –XX:NumberOfGCLogFiles=10 –XX:GCLOgFileSize=5M –Xloggc:/log/dump/服务名/容器IP/gc.log
dubbo配置
provider 事项:

服务调用超时时间需要设置合理,protocol 可以设置序列化方式,目前 Dubbo+Protobuf
或 spring-cloud 继承google的grpc 作为RPC通信协议的效果较好。

服务线程数配置需要满足

threads <= service1.executes1 + service1.executes2 + service1.executes3

如果dubbo版本在2.8.4 之前或等于,服务线程数配置需要满足(因限流的当前运行线程数为非线程安全导致的bug,会导致接受的请求数会超过设置的executes导致Thread pool is EXHAUSTED异常)

threads <= (service1.executes1 + service1.executes2 + service1.executes3) * 0.8~0.9

如果方法级未配置executes,所有方法(仅1个方法)公用该线程池情况下,设服务副本数为n
服务线程池threads配置为m,需满足因dubbo默认负载均衡(随机)导致可能的请求量比平均值高出30%分配到某服务上导致的线程池耗尽异常。

        前端并发数 <= n*m*0.7~0.9
        2C 机器配置参考 200 尽量通过增加副本数的情况下,让平均请求数低于150
	    4C 机器配置参考 400 尽量听过增加副本数的情况下,让平均请求数低于300

一般服务端配置

<dubbo:protocol id="dubbo" name="${service.name}" port="3+xxxx服务编号等保证不重复" threads="${server.threads}" />
<!-- 服务耗时根据调用链设置超时时间,一般从末端开始倒推 根据全链路追踪设置合理时间-->
<dubbo:service 
	interface="com.ali.study.dubbo.provider.demo.IGetAccountInfo"
	protocol="dubbo" ref="accountServiceImpl" version="${version}" timeout="${client.timeout}"
	executes="${service1.executes1}" />

<dubbo:service 
	interface="com.ali.study.dubbo.provider.demo.IGetAccountInfo2"
	protocol="dubbo" ref="accountServiceImpl" version="${version}" timeout="${client.timeout}" 
	executes="${service1.executes2}"/>

<dubbo:service 
	interface="com.ali.study.dubbo.provider.demo.IGetAccountInfo3"
	protocol="dubbo" ref="accountServiceImpl3" version="${version}" timeout="${client.timeout}"
	executes="${service1.executes3}"/>
consumer 事项:

通过事务型MQ作为重试机制,可控性较好,dubbo默认的超时等异常情况下的重试机制不建议使用,
对于强制依赖外部服务启动的机制应用较少,一般为关闭状态。

<dubbo:reference id="accountServiceImpl" 
	interface="com.ali.study.dubbo.provider.demo.IGetAccountInfo"
	version="${version}" scope="remote" retries="0" check='false' />
操作系统镜像参数优化

/etc/sysctl.conf 配置
ulimit 最大连接数
net.ipv4.tcp_keepalive_time 检测客户端连接状态时间
net.ipv4.tcp_max_syn_backlog 当SYN等待队列溢出时,启动cookies来处理。
net.ipv4.ip_local_port_range 默认TCP端口为 32768-61000 可以扩大该范围
net.ipv4.tcp_max_tw_buckets 当一个连接关闭时,TCP会通过四次握手来完成一次关闭连接操作。在请求量比较大的情况下,消费端会有大量TIME_WAIT状态的连接。该参数可以限制TIME_WAIT状态连接数量(数量超过该值时,会被立刻清除并打印警告信息)
net.ipv4.tcp_tw_resuse 一个TIME_WAIT端口被重复复用的间隔时间(与四部握手关闭有关,防止前一个关闭端口的信息发送到新端口)

[hsy@localhost ~]# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 127900
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1048576
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 1048576
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
[hsy@localhost ~]#cat /etc/sysctl.conf
Net.ipv4.tcp_syncookies = 1
Net.ipv4.tcp_tw_reuse = 1
Net.ipv4.tcp_tw_recycle = 1
Net.ipv4.tcp_fin_timeout = 30
SFTP

开启被动模式,主动模式由于容器外访问容器里的IP不可达导致SFTP不可用

Docker 使用COREDNS 还是 默认DNS

目前测试结果不是性能瓶颈,暂未调优。(4C 3台)

MYSQL

设置缓存区大小为虚拟机内存的一半
修改SQL缓冲区 buffer大小,防止因批量插入导致的缓存区溢出

Redis

快照 和 文件追加持久化方式混合
3主6从集群模式配置

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: idea的JVM参数可以在运行/调试配置中进行配置。 具体步骤如下: 1. 打开IntelliJ IDEA。 2. 点击菜单栏的"Run",选择"Edit Configurations"(或者按下Shift + Alt + F10)。 3. 在左侧的配置列表中选择你要配置JVM参数配置项,例如"Application"。 4. 在右侧的配置面板中,找到"VM options"(或者"VM options"),点击右侧的"+"图标添加JVM参数。 5. 在弹出的对话框中,输入你想要配置JVM参数,例如"-Xmx512m"(表示设置最大堆内存为512MB)。 6. 点击"OK"保存配置。 这样,在运行或者调试你的应用程序时,IDEA会使用你配置JVM参数。 需要注意的是,不同的配置项可能有不同的配置方式,具体的JVM参数配置取决于你使用的配置项类型。所以建议在配置JVM参数之前,先了解清楚你要配置的那个配置项的具体配置方式。 ### 回答2: 在Java虚拟机(JVM)中,可以通过命令行参数配置文件来配置JVM参数。具体来说,可以在以下位置配置JVM参数: 1. 命令行参数:可以在命令行中使用"-D"选项来配置JVM参数。例如,可以使用"java -D参数名=参数值"的命令来配置JVM参数。这些参数会直接传递给JVM,并在程序运行时生效。 2. 环境变量:可以通过设置JVM相关的环境变量来配置JVM参数。例如,可以使用"export 参数名=参数值"的命令来设置环境变量,在程序启动时JVM会读取这些环境变量并加载对应的参数。 3. 配置文件:可以通过修改JVM配置文件来配置JVM参数。不同的JVM实现可能有不同的配置文件,常见的包括"jvm.ini"、"jvm.conf"或"jvm.properties"等。通过编辑这些文件并添加或修改相应的参数,可以配置JVM的行为。 需要注意的是,JVM参数可以根据具体的需求进行不同的配置。其中一些常见的JVM参数包括堆内存大小、垃圾回收策略、类路径、编译优等。这些参数配置可以对程序的性能和行为产生重要影响,因此需要根据实际情况进行合理的调整和配置。 ### 回答3: Idea的JVM参数可以在其安装目录下的bin目录中的idea64.exe.vmoptions或idea.exe.vmoptions文件中配置。 可以按照以下步骤进行配置: 1. 首先,找到你的Idea安装目录,进入bin目录。 2. 在该目录下,你可以看到两个文件:idea64.exe.vmoptions和idea.exe.vmoptions。前者适用于64位操作系统,后者适用于32位操作系统。 3. 打开适用于你系统的文件(通过右键单击并选择"编辑"或使用任何文本编辑器打开)。 4. 在打开的文件中,你可以看到一系列以"-D"开头的行,每行都表示一个JVM参数。在这里你可以添加、修改或删除参数。 5. 添加/修改参数后,保存文件并重新启动Idea,新的JVM参数将生效。 请注意,修改JVM参数可能对Idea的性能和行为产生重大影响,因此在修改之前建议备份原始文件。同时,确保你理解所做更改的含义和影响,以免引起其他问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值