java服务压测遇到问题

news/2024/12/20 16:25:37/文章来源:https://www.cnblogs.com/liyanbofly/p/18619348

一、线程池数量

   实例服务器4C3G

   场景:服务A——》服务B; 实例服务器:8台,接口耗时 400ms

  现像服务A接口中有使用多线程, 设置线程池核心线程数:8 最大线程数量200  ,队列:10000,当进行压测时吞吐量一直超不过每秒请求量 qps: 500 ,且开始接口耗时也随着请求量上来而增长。

  原因:线程池核心线程:8  与最大线程:100 相差较多,可能在请求过程中不断创建新线程 比较耗时。

 调整:将线程池核心程调到:40 ,最大线程调到:40  ,qps每秒请求达到700以上;发起服务响应时间也降低。

如:

 /*** 自定义线程池* @return*/@Bean("selfThreadPool")public ThreadPoolExecutor getThreadPool() {log.info("corePoolSize:{},maximumPoolSize:{},queueSize:{}", corePoolSize, maximumPoolSize, queueSize);ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(40, 40, 30, TimeUnit.SECONDS, new ArrayBlockingQueue<>(200), new ThreadFactory() {@Overridepublic Thread newThread(Runnable r) {Thread thread = new Thread(r);thread.setName("self-thread-pool-" + thread.getId());return thread;}}, new ThreadPoolExecutor.CallerRunsPolicy());return threadPoolExecutor;}
}

 

二、 使用java  服务中用HttpClient  请求接口,请求量一直不高 

 实例服务器4C3G

   场景:服务A——》服务B; 实例服务器:8台,接口耗时 300ms   但请求多时接口耗时到800ms

  HttpClientBuilder builder = HttpClientBuilder.create();

   原因:没有设置MaxConnTotal、MaxConnPerRoute 两个属性;

    maxTotal 是设置同时间正在使用的最大连接数,默认值是20。
    maxPerRoute 是设置一个 host(ip或域名):port 同时间正在使用的最大连接数,默认值是2。 因为默认值maxPerRoute 较低在服务请求并发较多时,会有大部分请求处理等待连接情况,所以qpsi不高,请求耗时变得比较长。

   处理:设置maxTotal :100,maxConnTotal:400  使qps提高到700 以上,接口耗时在请求并发较多时也控制在400ms 以内

 

怎样计算 吞吐量 当cpu(4C3G)和内存都满足情况,假如一个请求耗时 350ms

  60000/350ms*200  理想状态,但一般实际情况会降低3-5倍,所以每台实例可承载请求量大概放算应该是 除以(3到5),考虑是否有大量其它接口一起场景。

 

三、 一个接口中有xml解析,请求qps 一直不高500 以下,耗时较长

     原因:每个请求都实例化一次xml 解析对象比较耗时

      处理:将xml解新定义成一静态,大大提高qps和请求耗时。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/855907.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

昂瑞微 OM6626:芯片界的超级 “多面手”

嘿,各位科技迷们!今天咱要来探秘一下芯片界的一位 “全能明星”—— 昂瑞微 OM6626。这小家伙的诞生,那可是有一番精彩故事呢!一、诞生背景:时代呼唤的 “超级英雄” 如今这物联网的世界,那发展速度就跟坐了火箭似的。大家对低功耗、高性能的无线通信芯片,那叫一个渴望啊…

C++实现windows自动化按键

1.选择目标窗口 获取窗口句柄 void KeyPresser::selectWindow() {SetWinEventHook(EVENT_SYSTEM_FOREGROUND, EVENT_SYSTEM_FOREGROUND, NULL, WinEventProc, 0, 0, WINEVENT_OUTOFCONTEXT);selectedWindowLabel->setText("请点击目标窗口..."); }void CALLBACK K…

C语言的头文件包含,竟存在这么多知识点!

文章来自:https://zhuanlan.zhihu.com/p/472808057 很多事不深入以为自己懂了,但真正用到项目上,才会发现其中的问题。曾以为自己写C语言已经轻车熟路了,特别是对软件文件的工程管理上,因为心里对自己的代码编写风格还是有自信的。 本人曾经认为,一个.c文件对应一个.h文件…

OpenApi 下达指令

Completions模型将字符串作为输入,模型将返回一个或多个预测的完成项。大多数开发者应该使用的 chatCompletions API 来使用OpenAI最好和最新的模型。大部分支持传统Completions端点的模型将在2024年1月4日停止服务Chat Completions APl Chat Completions服务是一种特定的Comp…

昇腾MindSpeed-LLM全流程实践及踩坑记录

目录昇腾MindSpeed-LLM全流程实践及踩坑记录1、 MindSpeed-LLM简介1.1 MindSpeed简介1.2MindSpeed-LLM核心功能1.3 业界主流加速库对比2、全流程实践2.1 环境搭建流程正式开始前必看前置:所以,一、直接在mcore下进行全流程操作;二、不要按照主页readme上的脚本执行任务指令,…

Go调试运行时出现 Failed to launch:could not launch process:not an executable file 错误

在调试运行时,点击 Start Debugging 时出现 这个问题是当前打开的文件中没有 main() 函数 所以 当 点击 Start Debugging 时,要选择打开 当前页有 main() 函数的文件 例

Origin绘图教程 | 第一张绘图从这里开始

主要内容:生成数据+绘图图形+简单美化+保存项目 生成数据并绘图 1. 打开Origin。默认会打开一个空白的工作簿,其中包含一个两列的工作表。 2. 右键单击A列,在弹出菜单中选择填充列: 一组数字...(若菜单列表被折叠,你需要展开整个右键菜单来找到这个选项——可做如下设置关…

Go使用zap和lumberjack库,实现每小时间轮转日志文件

创建一个文件夹,命名为 loggerDemo 打开这个文件夹 打开终端,点击左下角 叉和感叹号 在弹出的窗口中点击 TERMINAL 进入终端(也可以使用快捷键 CTRL+` 直接打开)初始化 Go 的 Modulego mod init loggerDemo点击文件创建图标创建文件 创建一个名为 main.go 的文件 ,按下 …

Goby自定义编写EXP入门篇:编写模板基础使用讲解

众所周知,Goby可以利用便捷的Json图形化编写PoC/EXP,但由于Goby的PoC/EXP基于Go代码,所以很多新手同学可能不太理解其中的变量和代码逻辑,为此,我们将开展从入门到精通的系列教程,为大家详细讲解如何使用Goby的JSON图形化界面进行漏洞编写。 入门篇:Goby Poc模板架构讲解…

SOLIDWORKS快捷键命令大全

SOLIDWORKS是一款广泛应用于工程设计、产品开发及机械制造领域的三维计算机辅助设计(CAD)软件。它以其直观的用户界面、强大的设计功能,成为了深受专业设计师喜爱的设计工具。想要在SOLIDWORKS中以更高的效率绘图,掌握一些快捷键,会让你的设计工作更加得心应手! 我们一起…

让AI碰撞!“天翼云息壤杯”高校AI大赛江苏赛区交流会热力开场!

由中国电信集团有限公司主办,天翼云科技有限公司承办的“天翼云息壤杯”高校AI大赛正在火热进行中。为了提高江苏赛区学生的参赛热情,增强学生的创作能力,江苏电信、天翼云华东中心于12月6日在南京联合举办了主题为“共筑教育新生态,息壤智汇新征程”的AI大赛交流分享会。由…

Parquet存储概述及读写时效对比

1. Parquet简介 Parquet是一种开放的列式存储格式,旨在提高大数据处理和分析的效率。 Parquet由Twitter和Cloudera合作开发,并于2015年5月从Apache的孵化器项目毕业,成为Apache的顶级项目。 Parquet旨在高效存储和处理大规模数据集,广泛应用于Hadoop、Spark等大数据生态系统…