高并发性能优化

大厂总结 Nginx 高并发性能优化笔记 在日常的运维工作中,经常会用到nginx服务,也时常会碰到nginx因高并发导致的性能瓶颈问题。这里简单梳理下nginx性能优化的配置。 阅读详情

从用户角度看,完成request到接收response的时间为jvm内部处理时间+http请求Redis 网络IO时间 + https请求远程服务器 网络IO时间 +用户本身request和服务器response返回的网络IO时间。


实际本地测试,https请求响应时间大约110ms~350ms 波动。使用

REST Client工具测试。



第一阶段:

使用多线程Future模型+普通HttpClient请求。

关键代码:

将Callable提交到线程池里,返回Future对象。Future一旦有值时,就通过调用Jfinal的renderText()输出

下面就是使用HttpClient进行请求

测试结果:

通过实际测试,并发从一开始36/sec逐渐降到10/sec。在控制台看到不少链接超时的异常信息。不少远程http请求Redis服务耗时竟然超过30s。


原因分析:Http连接Redis服务,虽然在正常情况下每次都能迅速响应,大约80ms-120ms(本地环境)。生产环境可以保证Redis和项目响应速度更快,但是在大量http请求下,由于目前代码效率不高,请求若是不能及时处理完,就会导致后面http请求延迟响应。


改善:引入google guava框架,利用其中的Cache功能,因为带有expireAfterWrite功能。把guava cache服务当成1级缓存,Redis服务当成2级缓存。并且增加保证cache内各对象失效时间早于Redis内存储的失效时间,并且cache能够及时从Redis更新.这样减少了Http请求Redis的网络开销。


第二阶段:

引入guava框架后,改善显著。

关键代码:

一开始预设1000秒过期。


cache 内的对象如果过期了,需要重新设置过期时间,过期时间需要动态计算服务器当前时间和Redis内保存的时间差值,保证cache内的对象不会旧于Redis。这样在多实例中,guava的cache充当了1级缓存。


测试结果: 并发果然大大提高,大约可以上到57/sec.

本来两次Http请求,由于引入了guava缓存,变成了一次https请求。效率当然提高了。但是仍然不是很满意,因为测试过程中error率大约有0.3%。而且观察日志,不少请求费时有50s,甚至有120s。测试时发现jetty在运行过程中,会发生停顿现象,所谓的停顿就是完全没有响应。熟悉jvm垃圾回收的朋友应该知道,这个时候jvm发生了Full GC,GC过程中会对导致程序运行中断。


原因分析:

1.大量http请求堆积,需要限制访问httpClient.execute方法的数量。避免引起阻塞。

2.降低或避免Full GC,要对jvm运行参数进行调优。但是在生产环境中(微软云,Paas服务),却无法配置jvm运行参数(可能我暂时不知道吧)。


措施:

引入Java多线程信号量Semaphore


Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源


通俗的讲:就是公园大门就10扇门,来了1000人都争先恐后的挤破脑袋想进去,结果都挤在一堆了乱哄哄的,没见的有多少人能进去。

Semaphore就是做了一个控制管理,比如规定每次只能放10人进行来,其它人只能等,处理完一个,后面就跟上,直到全部处理完。这样比一堆人哄在门口要有效率的多。

(Semaphore 在本公众号早些时候有专门文章讲解的)


对于本应用来说,Semaphore的值太低是不行的,太高也不行。

关键代码:

采用了公平模式



acquire() 获得锁

release() 释放锁




测试了几个数字发现当Semaphore = 200时,并发数比较高。


测试结果:公平模式大约68.7/sec,峰值可以上到110/sec,错误率0%,果然通过控制访问httpClient.execute方法的数量,能提高并发数。在测试过程中,仍然发生了好几次Full gc(),把并发数给降了下来。


第三阶段:

上Apache网站上发现HttpAsyncClient框架


HttpAsyncClient may be of interest to anyone building HTTP-aware client applications based on asynchronous, event driven I/O model.


OSChina上这样介绍的

HttpAsyncClient 的出现并不是为了替换 HttpClient,而是作为一个补充用于需要大量并发连接,对性能要求非常高的基于HTTP的原生数据通信,而且提供了事件驱动的 API。


关键代码:

改造Post请求方法



连接池初始化以及单例模式


直接返回Future对象!查看源码,还有另外一个惊喜,不需要再对SSL写一堆东西了。注意:使用HttpAsyncClient后不再使用Semaphore了。


测试结果:每秒稳定80/sec~85/sec,而且jvm几乎没有停顿过。5000个请求很快就跑完了。而且最大延迟也就7s.

Ingress-nginx高并发性能优化实战指南 在Kubernetes集群中,Ingress作为流量入口的核心组件,其性能优化直接影响整个系统的吞吐能力。本文从Linux内核参数调优、Nginx工作进程配置到Kubernetes资源分配,系统性地解析高并发场景下的性能瓶颈解决方案。通过调整TCP连接参数、优化缓冲区设置和实现智能弹性伸缩,可显著提升Ingress Controller的QPS处理能力。针对电商大促、金融交易等高并发场景,特别分享了连接数计算公式、HPA自动扩缩容策略等实战经验,帮助运维团队构建稳定高效的流量入口。 阅读详情

相关推荐

SpringBoot高并发性能优化实战15招

在Java企业级开发中,SpringBoot因其快速开发特性广受欢迎,但在高并发场景下默认配置往往成为性能瓶颈。通过Web容器选型、线程池调优等基础优化,结合缓存策略、异步处理等应用层技巧,可显著提升系统吞吐量。本文以电商秒杀系统为例,详细解析如何通过Undertow容器替换、JVM参数调优、多级缓存架构等15个实战技巧,将单机QPS从3000提升至45000。这些方案均经过百万级并发验证,特别适合需要应对流量高峰的互联网应用。

weixin_42528191的博客 170

优化高并发的常见十种解决办法

大文件的下载会占用很大的流量,并且对于非SCSI硬盘来说,大量文件下载会消耗 CPU,使得网站响应能力下降。对于大部分公司,会选择廉价有效的方法扩展整个系统的架构,来增加服务器的吞吐量和处理能力,以及承载能力。普通的P4服务器一般最多能支持每天10万独立IP,如果访问量比这个还要大, 那么必须首先配置一台更高性能的专用服务器才能解决问题 ,否则怎么优化都不可能彻底解决性能问题。当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,很有可能会死在那儿了。10.控制大文件的下载。

keehom的博客 2682

[Java实战]Springboot项目高并发性能优化(五)

Springboot项目高并发性能优化

曼岛_的博客 2051

高并发性能调优

下面是项目大概的一个模型: 从用户角度看,完成request到接收response的时间为jvm内部处理时间+http请求Redis 网络IO时间 + https请求远程服务器 网络IO时间 +用户本身request和服务器response返回的网络IO时间。 实际本地测试,https请求响应时间大约110ms~350ms 波动。使用 REST Clien

liaomengge的专栏 5711

VS Code+ESP-IDF开发避坑指南:头文件标红报错的5种解决方法(附CMakeLists.txt配置)

本文详细解析了在VS Code中使用ESP-IDF开发ESP32时头文件标红报错的5种解决方法,包括环境配置检查、CMakeLists.txt规范配置、路径解析策略、缓存清理技巧和高级调试手段。特别提供了CMakeLists.txt的实战配置示例,帮助开发者彻底解决头文件路径问题,提升开发效率。

weixin_33670786的博客 559

告别手动输入!用Access批量导入307种土壤数据到SWAT模型(附完整MDB操作流程)

本文详细介绍了如何利用Microsoft Access批量导入307种土壤数据到SWAT模型,显著提升数据录入效率。通过解析usersoil表结构、提供Access操作指南和VBA自动化脚本,帮助环境工程师避免手动输入错误,实现高效数据管理。文章还包含性能优化技巧和常见错误解决方案,是SWAT模型用户的实用指南。

weixin_28366053的博客 324

大厂都是如何对高并发系统做性能优化的?,理论+实战双管齐下

虽然面试套路众多,但对于技术面试来说,主要还是考察一个人的技术能力和沟通能力。不同类型的面试官根据自身的理解问的问题也不尽相同,没有规律可循。上面提到的关于这些JAVA基础、三大框架、项目经验、并发编程、JVM及调优、网络、设计模式、spring+mybatis源码解读、Mysql调优、分布式监控、消息队列、分布式存储等等面试题笔记及资料。

2301_76190858的博客 1283

深度学习batch、batch_size、epoch、iteration以及小样本中episode、support set、query set关系

训练整个数据集是epoch、把数据集分为多少小块就是batch,每个小块(batch)多少个数据就是batch_size,整个数据集需要训练多少轮是iteration

qq_42740834的博客 1610

Java架构师之路六、高并发与性能优化:高并发编程、性能调优、线程池、NIO、Netty、高性能数据库等。

支持 scatter/gather: Java NIO 提供了分散(scatter)和聚集(gather)的操作方式,允许一个通道的数据同时读入到多个缓冲区中,或者将多个缓冲区中的数据同时写出到一个通道中,这样可以更加灵活地处理数据。keepAliveTime: 非核心线程的存活时间,当线程数超过核心线程数时,多余的空闲线程的存活时间,超过该时间将被销毁。总的来说,Java 线程池是多线程编程中的重要工具,能够提高程序性能、降低资源消耗,并且能够有效地管理线程,确保系统的稳定性和可靠性。

shenzhiyoushen的博客 2321

android so文件攻防实战-美团libmtguard.so反混淆

接下来的代码很多都是这种动态计算跳转地址的。修复结束之后跟踪指令,0x3434处的代码跳到了0x345A,0x345A处的代码主要逻辑是在0x34C6跳到0x34EC通过0x34EC动态计算地址跳到了0x3520,0x3524处的代码跳到了0x365C,0x366E处的代码跳到了0x35A8,0x35A8是JNI_OnLoad的主要逻辑。BEQ和BNE是一对条件相反的跳转,这之前计算出接下来指令的地址0x3430赋值给R4,loc_340C处的代码通过POP指令将R4的值给PC,看0x3430处的代码。

2503_90751938的博客 1381

Realtek 10GbE芯片组解析:低成本高速网络方案

10GbE(万兆以太网)技术通过提升网络带宽,显著改善了数据传输效率,成为现代网络架构的核心组件。其工作原理基于高速串行通信协议,通过优化信号处理和编码技术实现低延迟、高吞吐量。在技术价值上,10GbE不仅满足数据中心和企业网络的高需求,还逐步渗透到消费级市场,推动家庭和小型企业的网络升级。应用场景包括NAS存储、视频编辑工作站和云服务接入等。Realtek最新发布的RTL8127、RTL8159和RTL8261C芯片组,以低功耗和低成本优势,进一步降低了10GbE的普及门槛。这些芯片支持PCIe Gen4

weixin_36427956的博客 583

(一)高并发压力测试调优篇——MYSQL数据库的调优

在实际项目开发中,很多业务场景下都需要考虑接口的性能要求,追求高并发、高吞吐量。那么对于此类问题如何入手呢?关注作者,不迷路。本节内容主要介绍在数据库db方面的优化,以mysql数据库为例。

厉害哥哥的博客 3833

图数据挖掘 ECC K-core core number truss number clique

K-core:什么叫k-core,给定一个正整数k(k>=0),k-core是一个G的最大子图(也就是说k-core是一个图的限制),将这个子图定义为Hk,对于Hk中的每个顶点v,他的度数都是大于等于k的。 k-core是内嵌的,如下图所示,集合{ABCD}是H3,也就是3-core的子图。而集合{ABCDE}是H2,也就是2-core的子图,集合{ABCDEGF}是H1,也就是1-core的子图,而从集合的角度来讲H3<H2<H1。 core number:什么叫kcor

weixin_45193103的博客 1684

高并发性能优化随笔

本文介绍了多种高并发性能优化技巧,包括 MySQL 的索引和分库分表、缓存的使用、消息队列与流量聚合、线程池的优化等。这些技巧在实际开发中非常有用,可以帮助我们更好地应对高并发场景,提升系统的性能和稳定性。

2401_85373732的博客 1286

Android功耗系列专题分析之四:待机概率性功耗高的失效分析

本文分析了Android设备待机功耗异常高的问题。通过日志发现系统休眠失败,原因是PowerManagerService.Display唤醒锁未被释放。进一步排查发现,指纹解锁功能在灭屏时未正确释放屏幕锁定,导致DisplayReady状态异常。解决方案是将指纹功能的背光控制与DisplayReady状态控制分离,使用两个变量独立管理。经验表明,快速定位问题比解决问题更重要,修改原生流程时需谨慎评估风险。

451

CAN总线入门(硬件部分)

这篇博客讲述CAN总线入门知识。

记得诚 1万+

大佬总结 Nginx 高并发性能优化笔记

在日常的运维工作中,经常会用到nginx服务,也时常会碰到nginx因高并发导致的性能瓶颈问题。这里简单梳理下nginx性能优化的配置。

分享技术应用、实践场景等,评论区开放技术难题讨论,共同成长进步。 1114

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

网站高并发性能优化实战指南:从架构升级到分布式系统设计

本文探讨了在互联网平台用户数量激增背景下,如何优化和升级网站系统架构以应对高并发、高流量的挑战。文章首先分析了系统性能瓶颈的常见来源,包括应用层并发能力不足、数据库单点瓶颈、缓存使用不当和业务耦合严重等问题。接着,提出了提升系统性能的核心方向,如架构升级为微服务体系、前后端请求分流与缓存机制优化、异步化与消息队列解耦、数据库读写分离与分库分表等。文章还深入探讨了分库分表后的挑战与对策,并提出了在分库分表极限后系统应如何演进的建议,包括冷热数据分离、引入搜索引擎与多数据模型系统、使用分布式数据库或中间件、多级

Leaton的博客 1065

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Nginx:影响高并发性能优化的主要参数配置

Nginx是一个高性能的HTTP和web服务器,在连接高并发的情况下,Nginx是Apache服务不错的替代品。日常的运维工作中,我们经常会用到nginx服务,也时常会碰到nginx因高并发导致的性能瓶颈问题。今天,我来简单总结、梳理下配置文件中影响Nginx。

l4120228的博客 948

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

论系统高并发性能优化的设计与实践

本文以电商秒杀系统为例,系统阐述了高并发架构优化的关键策略与实践经验。针对秒杀场景瞬时峰值流量、数据库压力过大等核心痛点,作者作为技术负责人主导了包含缓存设计、异步处理、限流降级等六大维度的全链路优化:通过多级缓存架构解决热点Key问题,利用消息队列实现流量削峰,采用读写分离和分库分表减轻数据库压力,并完成微服务拆分和弹性扩容。优化后系统QPS从8000提升至20000,时延降低64%,可用性达99.995%。文章特别强调了架构设计中的权衡艺术,指出需根据业务特性在性能与一致性、实时性与吞吐量之间取得平衡

qq_65032048的博客 496

.NET 8 + Angular WebSocket 高并发性能优化

.NET 8 + Angular WebSocket 高并发性能优化

Impossible==I'm possible. 691

Nginx高并发性能优化

Nginx高并发性能优化

m0_75233142的博客 1742

SpringCloud高并发性能优化

1. SpringCloud高并发性能优化 1.1. 前言 当系统的用户量上来,每秒QPS上千后,可能就会导致系统的各种卡顿,超时等情况,这时优化操作不可避免 1.2. 优化步骤 第一步:优化大SQL,对于多表关联的SQL,当单表数据几百上千万行时,执行可能会达到好几秒,对微服务系统来说,我是不建议join多表操作,除非是数据量少的维表,我们可以将一句大SQL拆分成多个过程,逻辑在J...

tzxylao的博客 1053

Java服务高并发性能优化排查指南

当Java服务在低并发时响应迅速,但高并发时性能急剧下降时,可能是由多种因素导致的。

z17826856787的博客 1282
上一篇: Elastic-Job - 分布式定时任务框架
下一篇: BloomFilter算法概述
Footloose_
博客等级 码龄10年 254粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值