应用程序主要参数
线程分配
- 主要影响
- 响应速度
- 并发量
- 数据查询量 ?
- 受服务相关配置的影响
- 处理器
- 内存
内存分配
- 主要影响
- 大数据处理
- 线程分配最大值
- 受服务器相关配置的影响
- 内存
应用程序主要配置
线程
跨服务调用线程配置
在 service/sc-config/config/app/app-public.yml 配置文件中配置
hystrix:
threadpool:
default:
coreSize: 200 # 并发执行的最大线程数
maxQueueSize: 500 # BlockingQueue的最大队列数
queueSizeRejectionThreshold: 500
command:
default:
execution:
isolation:
semaphore:
maxConcurrentRequests: 500 # 最大并发请求数
应用程序线程池配置
在 service/sc-config/config/app/app-public.yml 配置文件中配置
# 线程池配置
thread-pool-config:
core-pool-size: 16 # 核心线程数
max-pool-size: 64 # 最大线程数
queue-capacity: 500 # 缓冲队列数
keep-alive-seconds: 60
MySQL 线程池配置
在 service/sc-config/config/app/*.yml 的应用程序对应配置文件中配置
spring:
datasource:
druid:
app-base-msg:
initial-size: 10 # 初始化连接
min-idle: 5 # 最小空闲连接
max-active: 600 # 最大连接数量
操作系统对线程数量的限制
- 限制最大线程数的主要因素: 线程堆栈大小, 进程的最大内存
- 通过
ulimit -a命令, 可以查看操作系统默认资源限制的设定
内存
在应用程序的相关 docker-compose.yml 文件中配置
command: "java -jar -Xmx1024m -Xms1024m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m ./app.jar"
参数说明
java(JDK8) 运行命令相关参数
-Xmx1024m: JVM 最大的堆内存为1024m-Xms1024m: JVM 启动时初始化堆内存为1024m. 此值可以设置与-Xmx相同, 以避免每次垃圾回收完成后JVM重新分配内存-Xmn400m: JVM 堆内存新生代大小为400m, 增大新生代后, 将会减小老年代大小. 此值对系统性能影响较大, 官方推荐配置为整个堆的3/8-Xss1m: 每个线程的堆栈大小为 1m, 默认值为 1m, 选项对性能影响比较大, 一般不需额外设置, 减小这个值能生成更多的线程. 但是操作系统对一个进程内的线程数还是有限制的, 不能无限生成, 经验值在3000~5000左右-XX:MetaspaceSize=256m: 初始元数据空间大小为 256m-XX:MaxMetaspaceSize=512m: 最大元数据空间大小为 512m-XX:+HeapDumpOnOutOfMemoryError: 该参数可以在内存溢出时导出整个堆信息-XX:HeapDumpPath=./app.dump: 设置导出堆的存放路径-XX:+PrintGC: 打印 GC-XX:+PrintGCDetails: 打印 GC 详情-XX:+PrintGCTimeStamps: 打印 GC 的时间戳(以基准时间的形式)-XX:+PrintGCDateStamps: 打印 GC 的时间戳(以日期的形式)-XX:+PrintHeapAtGC: 在进行 GC 的前后打印出堆的信息-Xloggc:./gc.log: 设置 GC 日志文件的路径- 一些参数在
JDK9已废弃
应用实例内存分配
默认值为 "APP_JAVA_OPTS=-Xms1024m -Xmx1024m", 修改 APP_JAVA_OPTS 的值, 如果不存在则新增一行
app-dev-md:
image: docker.craftmake.cn/app-dev-md:latest
environment:
- HOST=127.0.0.1
- SERVER_PORT=5010
- "APP_JAVA_OPTS=-Xms4096m -Xmx4096m"
- SW_AGENT_NAME=rlxcl::app-dev-md
- SW_AGENT_COLLECTOR_BACKEND_SERVICES=218.77.104.104:11800
volumes:
- ../00-volume/config:/home/app/config
- ./app-dev-md/logs:/home/app/logs
- ./app-dev-md/plugins:/home/app/plugins
ports:
- 5010:5010
networks:
- gjzz_net
restart: always
ha(公有云部署)
High Availability, 高可用, 多应用实例时部署
| 名称 | 端口 | 运行值 | 备注 |
|---|---|---|---|
| entry | 80 | ||
| app | 8010 | ||
| portal | 8000 | ||
| service | 8080, 8090 | ||
| static | 8020 |
lb(私有部署)
Load Balance, 负载均衡, 多应用实例时部署
| 名称 | 端口 | 运行值 | 备注 |
|---|---|---|---|
| entry | 80 | ||
| app | 8010 | ||
| portal | 8000 | ||
| service | 8080, 8090 |
web
| 名称 | 端口 | 运行值 | 备注 |
|---|---|---|---|
| app | 3010 | ||
| portal | 3000 | ||
| static | 3020 | ||
| website | 3030 |
ext(node)
| 名称 | 端口 | 运行值 | 备注 |
|---|---|---|---|
| ext-base-cds | 6050 | ||
| ext-base-scm | 6070 | ||
| ext-dev-lcds | 6060 |
app
| 名称 | 端口 | 运行值 | 默认最大值 | 64G 建议最大值 | 32G 建议最大值 | 备注 |
|---|---|---|---|---|---|---|
| app-base-ads | 5070 | 1024M | ||||
| app-base-msg | 5060 | 1024M | ||||
| app-base-print | 5050 | 1024M | 只在公有云上部署 | |||
| app-base-sop | 5080 | 1024M | ||||
| app-base-sys | 5030 | 1024M | ||||
| app-base-uc | 5020 | 1024M | 只在公有云上部署 | |||
| app-dev-md | 5010 | 1024M | ||||
| app-dsf-les | 5170 | 1024M | ||||
| app-dsf-ppe | 5150 | 1024M | ||||
| app-dsf-pps | 5200 | 1024M | ||||
| app-dsf-qms | 5190 | 1024M | ||||
| app-dsf-wms | 5160 | 1024M | ||||
| app-dsf-wpm | 5180 | 1024M | ||||
| app-gateway-oauth | 6110 | 1024M | 只在私有环境上部署 | |||
| app-gateway-print | 6130 | 1024M | 只在私有环境上部署 | |||
| app-gateway-scm | 6150 | 1024M | 只在私有环境上部署 | |||
| app-gateway-uc | 6120 | 1024M | 只在私有环境上部署 | |||
| app-pub-bim | 5110 | 1024M | ||||
| app-pub-cbo | 5100 | 1024M | ||||
| app-pub-event | 5120 | 1024M | ||||
| app-sps-bug | 6200 | 1024M | ||||
| app-sps-project | 6210 | 1024M |
service
| 名称 | 端口 | 运行值 | 默认最大值 | 64G 建议最大值 | 32G 建议最大值 | 备注 |
|---|---|---|---|---|---|---|
| service-base-file | 2060 | 1024M | 512M | |||
| service-base-mqtt | 2070 | 1024M | 512M | |||
| service-base-print | 2130 | 1024M | 512M | |||
| service-base-quartz | 2090 | 1024M | 512M | |||
| service-base-rabbitmq | 2100 | 1024M | 512M | |||
| service-base-redis | 2110 | 1024M | 512M | |||
| service-base-txlcn-tm | 2120, 2220 | 1024M | 512M | |||
| service-base-websocket | 2080 | 1024M | 512M | |||
| service-esb-mes | 2150 | 1024M | 512M | |||
| service-oauth-server | 2160 | 1024M | 512M | 只在公有云上部署 | ||
| service-sc-config | 2030 | 1024M | 512M | |||
| service-sc-esb | 2000 | 1024M | 512M | |||
| service-sc-eureka | 2020 | 1024M | 512M | |||
| service-sc-gateway | 2010 | 1024M | 512M | |||
| service-sc-zipkin | 2040 | 1024M | 512M |
base
| 名称 | 端口 | 运行值 | 备注 |
|---|---|---|---|
| elasticsearch | 9200, 9300 | ||
| kibana | 5601 | ||
| logstash | 9600, 5044 | ||
| mongo | 27017 | ||
| mosquitto | 1883, 9001 | ||
| mysql | 3306 | ||
| rabbitmq | 5672, 15672 | ||
| redis | 6379 | ||
| redis-cluster-01 | 6371, 16371 | ||
| redis-cluster-02 | 6372, 16372 | ||
| redis-cluster-03 | 6373, 16373 | ||
| redis-cluster-04 | 6374, 16374 | ||
| redis-cluster-05 | 6375, 16375 | ||
| redis-cluster-06 | 6376, 16376 |
常见问题
线程较少导致的问题
- 并发访问时出现
java.lang.IllegalStateException: No thread-bound request found - 数据保存事务出现
com.codingapi.txlcn.common.exception.TxManagerException: attempts to join the non-existent transaction group - 关联查询展开字段出现
cn.cw.common.base.util.exception.ProgramException: 展开字段【x】不存在
内存较少导致的问题
- 处理大数据量时出现
java.lang.OutOfMemoryError
线程较多, 内存较少的问题
org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.OutOfMemoryError: unable to create new native thread
请求数据量过多且有展开字段时的问题
No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.