前言

以前总以为压测TPS上不去,是垃圾回收没配好或者Redis性能评测。为了提高TPS,试了多个垃圾回收的优化配置、也把缓存全改成本地缓存,但是TPS还是上不去。
最后发现其实是连接和线程池都没配置好。

小孩子不吃饭,胃口再大也长不高。

排泄不正常,会长痘痘的

tomcat配置

#最大线程数(指的是处理业务的线程)
server.tomcat.threads.max
#最小线程数(空闲时依旧不关闭)
server.tomcat.threads.min-spare-
#队列长度
server.tomcat.accept-count
#最大连接数
server.tomcat.max-connections
#连接建立的超时时间
server.tomcat.connection-timeout

解释:
threads.max 默认200,如果设置过大,消耗系统资源,例如栈空间。上下文切换频繁也会导致业务卡顿。如果设置太小,又没法充分利用CPU的处理能力。
一般来说,互联网应用多属于IO密集型,CPU消耗并不在业务服务器而是Mysql、Redis这些服务,所以在内存运行的前提下是可以设置大点。服务如果内存不足以创建更多连接,可以用-Xss配置线程栈空间大小,从而创建更多线程。

max-connections 默认值8192,可创建连接的最大数,连接数超出这个值后,系统还能接受新连接,但是不创建(接收但是不发送SYN-ACK
),从客户端的角度看就是请求卡在连接的阶段,只有当前连接数小于max-connections 时,才继续创建新连接。可以运行创建比处理线程数还多的连接,但是连接会占用文件句柄,如果tomcat的连接数过多了导致当前服务访问其他服务的连接创建不了。

accept-count 默认值100,连接数超出max-connections ,还能再接受新连接的数量是这个值,请求连接的数量超出这个值,会丢弃连接 。在客户端看到就是连接不可用

连接池配置(数据库和redis)

#空闲时的最大连接数
maxIdle
#最大连接数,一般设置为可能的请求数量
maxActive
#获取连接的最大等待
maxWait
#配置略去部分前缀

Redis连接池的maxActive和Redis的maxclients设置大些,redis是单线程,没有上下文切换的问题,多创建连接可以获得更好的性能。但是也不是无限增大,因为连接都是需要占用文件句柄的

RabbitMq连接工厂配置 (其实也是连接池)

有两种模式 CONNECTION模式和CHANNEL模式

前者会同时缓存Connection和Channel,后者只会缓存Channel。

RabbitMq是用到tcp复用,但是在并发较高的情况下,单连接也会出现瓶颈

#可以设置可以缓存的channel
cache.channel.size
#可以设置缓存可以缓存的连接
cache.connection.size
#配置略去部分前缀

Http Client 连接池

有两个地方
如果项目中用了ApacheHttpClient:
#最大连接数
feign.httpclient.max-connections
#每个地址的最大连接数
feign.httpclient.max-connections-per-route

如果没有ApacheHttpClient:
#最大连接数
ribbon.MaxTotalHttpConnections
#每个地址的最大连接数
ribbon.MaxConnectionsPerHost

Hystrix 线程池

hystrix.threadpool.default.coreSize
hystrix.threadpool.default.maximumSize

当然,如果下游接口响应很快(比如全是走redis或者内存),用Hystrix线程池隔离的方式,线程的上下文切换消耗的时间也是需要考虑的,尤其高并发下。这时可以采用信号量隔离的方法。(需要支持“超时”时,依旧需要启动一个HystrixTimer线程)
#支持信号量
hystrix.command.default.execution.isolation.strategy=SEMAPHORE
#信号量模式下默认的最大请求数
hystrix.command.default.execution.isolation.semaphore.maxConcurrentRequests=1000

备注:default是修改默认的策略,线上可以指定GroupKey或者commandKey去配置

Linux操作系统

Linux创建连接依赖于文件句柄,设置最大文件句柄可以创建更多连接
在 /etc/security/limits.conf 加入

  • soft nofile 65536
  • hard nofile 65536

TIME_WAIT 数量过多

压测时查看time_wait 数量
netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’

如发现系统存在大量TIME_WAIT状态的连接,这些连接也占用文件句柄,通过调整内核参数解决:
编辑文件/etc/sysctl.conf,加入以下内容:
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30

然后执行 /sbin/sysctl -p 让参数生效
net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
net.ipv4.tcp_fin_timeout 修改FIN-WAIT-1、FIN-WAIT-2、TIME-WAIT的TIMEOUT时间

优化涉及的连接相关配置相关推荐

  1. redis专题:redis键值设计、性能优化以及redis连接池配置

    文章目录 1.redis键值设计 ①:key设计规范 ②:value设计规范 2. 命令使用优化 3. redis连接池配置参数设计 4. redis连接池预热 5. redis的key过期删除策略 ...

  2. Altium Designer20版本的相关配置跟优化(很重要)

    对于学习 Altium Designer同学,它的相关配置跟优化非常重要,优化就是把不需要的给剔除了,这样软件加载就不会很慢. 接下来,我就给大家介绍一下如何配置跟优化它. 默认是安装是英文的,后面也 ...

  3. 性能优化之数据库和数据源连接池配置

    什么?!数据库连接拿不到? 今天在公司对系统进行压测,由于我的sit和dev和uat环境都是用的用的是一个数据库服务器,我让用户在的sit进行压测,分别是单线程测试,并发测试,但是用户一开始测,我的三 ...

  4. Linux学习之ARM开发板连接ubuntu18.04LTS及NFS相关配置

    Linux学习之ARM开发板连接ubuntu18.04LTS及NFS相关配置 第一步:在PC机安装Ubuntu18.04LTS 具体安装步骤参见上一篇文章 第二步:安装arm-linux-gcc交叉编 ...

  5. 远程连接linux配置文件,Linux远程连接介绍及相关配置

    Linux远程连接介绍及相关配置 1.使用远程连接的根本原因 在企业现实的工作中,我们不可能每台服务器都配置一台显示器,也不可能时刻在服务器旁边,但是我们企业中的服务器需要时刻进行维护,而我们维护人员 ...

  6. mysql连接参数配置

    前言 mysql性能优化涉及到很多方面,在上一篇中通过explain打印出sql的执行计划可以作为指导开发人员进行sql优化是一个方面,另外,mysql自身的参数配置也很多,比如连接参数(connec ...

  7. mysql odbc连接池_Java Mysql连接池配置和案例分析--超时异常和处理

    前言: 最近在开发服务的时候, 发现服务只要一段时间不用, 下次首次访问总是失败. 该问题影响虽不大, 但终究影响用户体验. 观察日志后发现, mysql连接因长时间空闲而被关闭, 使用时没有死链检测 ...

  8. 转战物联网·基础篇12-了解物联网之物连接相关通信技术(1)

    转战物联网·基础篇12-了解物联网之物连接相关通信技术(1) 一.物连接架构概览 1.通过一张图了解"物连接" 2.网关控制器内部功能 二.硬件设备间组网的物理链路形式 1.有线组 ...

  9. 转战物联网·基础篇13-了解物联网之物连接相关通信技术(2)

    转战物联网·基础篇13-了解物联网之物连接相关通信技术(2) 三.硬件设备间组网的通信技术与通信协议(2) 11.6LoWPAN 12.PROFINET 13.EtherCAT 14.RFID.NFC ...

最新文章

  1. 元宇宙中可跨语种交流,Meta 发布新语音模型,支持128种语言无障碍对话
  2. 安卓Socket连接实现连接实现发送接收数据,openwrt wifi转串口连接单片机实现控制...
  3. java.awt.Graphics2D绘制流程图基本元素
  4. oracle聚合函数wmsys,oracle 自定义聚合函数
  5. leetcode python3 简单题21. Merge Two Sorted Lists(Linked)
  6. Linux的段错误调试方法
  7. 中兴2016笔试题答案Java_中兴笔试题和面试题答案与答案
  8. (丝滑版)Python使用Opencv画一个哆啦A梦(动态),并制作成可执行文件.exe
  9. bluetooth 驱动 Makefile
  10. Spark面试题及其答案
  11. html 毛笔书写效果,canvas 手写毛笔字效果
  12. 计算机R3处理器,2018年3月最新版处理器天梯图 秒懂三月台式电脑处理器性能排行...
  13. GIS应用技巧之环形地图制作
  14. 什么是DFX测试.md
  15. JQuery 的添加元素
  16. 计算机课怎样制作ppt 课件ppt,计算机多媒体课件制作.ppt
  17. rtmp协议规范详解
  18. Unity基础笔记(6)—— Unity导航系统
  19. FLASH 模拟程序学习笔记(1)
  20. 头脑风暴会的10项原则

热门文章

  1. Redis 21 问,你接得住不?
  2. [POJ1474] 监控摄像头
  3. 2020年Java前景如何?现在还适合入行吗?
  4. Sci-Hub 网页版地址
  5. Sci-hub网站链接
  6. html输入框初始输入法,【报Bug】input输入框聊天页面,如果输入法默认是全屏手写,input会被挡住,这个能解决吗?...
  7. 阿里云学生服务器官网入口
  8. 韩梦飞沙音乐 第三弹
  9. 他们测试了上万款APP应用,总结了APP测试的经验及流程
  10. C++笔记 51:编写new和delete时需固守常规