对于无大量代理类和需要装载大量第三方外部包的情况下,元空间需要设置一个上限值,并且建议MetaspaceSize值等于MaxMetaspaceSize值,防止触发容器被直接kill掉,具体原因可参考https://blog.csdn.net/u011381576/article/details/79635867
老年代预留128M(根据是否使用大缓存修改)
-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
对于无需动态生成类的情况下,元空间需要设置一个上限值,并且建议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
服务调用超时时间需要设置合理,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}"/>
通过事务型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
开启被动模式,主动模式由于容器外访问容器里的IP不可达导致SFTP不可用
目前测试结果不是性能瓶颈,暂未调优。(4C 3台)
设置缓存区大小为虚拟机内存的一半
修改SQL缓冲区 buffer大小,防止因批量插入导致的缓存区溢出
快照 和 文件追加持久化方式混合
3主6从集群模式配置