- 博客(500)
- 资源 (8)
- 收藏
- 关注

原创 【性能调优】一次监控数据错误的性能调优经历
在对自建存储服务的回调接口进行调优时,QPS始终卡在1万瓶颈。经过源码分析(包含1次Redis查询、2次DB操作、5次本地缓存读取和1次外部调用)和多轮压测(节点数与QPS呈线性增长至5节点后停滞),最终发现数据库实际CPU使用率被监控误导(显示仅50%但实际已达瓶颈)。通过火焰图和链路分析确认DB操作为主要耗时点,调整数据库配置后问题解决。案例揭示了监控数据准确性对性能分析的关键作用。
2021-05-24 00:09:16
3732
4

原创 【Redis】技术评审要点
针对redis在技术方案评审或测试方案设计时的一些注意要点一、大key1.1 定义单个简单的key存储的value很大hash、set、list中存储过多的元素1.2 场景热门话题下评论、答案排序场景大V的粉丝列表使用不恰当,或者对业务预估不准确、不及时进行处理垃圾数据等1.3 风险:单个size太大,并发高容易把redis带宽打满读写大key会导致超时严重,甚至阻塞服务如果删除大key或者自动过期,DEL命令可能阻塞Redis进程数十秒,使得其他请求阻塞redis是
2021-05-23 01:38:16
2890

原创 【网络协议】mysql协议数据包分析
使用tcpdump抓取应用层mysql协议的数据包,然后使用wireshark工具对mysql协议数据包进行分析一、tcpdump数据包可以通过端口规则或mysql规则抓取对应的mysql数据包,接下来通过端口规则限定抓取mysql的数据包1.1 查看mysql的端口jdbc:mysql://swqa.lluozh.com:3487/lluozh?characterEncoding=UTF-8即显然当前数据库的端口为34871.2 tcpdump数据包根据端口信息抓取对应的数据包tcpdu
2021-05-22 01:48:11
5289
6

原创 【网络协议】tcpdump抓包
一、简介tcpdump根据使用者的定义对网络上的数据包进行截获的包分析工具,用简单的话来定义:dump the traffic on a networktcpdump可以将网络中传送的数据包的"头"完全截获下来提供分析支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句去掉无用的信息tcpdump基于底层libpcap库开发,运行需要root权限二、抓包原理Linux抓包是通过注册一种虚拟的底层网络协议来完成对网络报文(准确的说是网络设备)消息的处理权当网卡
2021-05-17 08:48:42
3773
4

原创 【性能调优】单接口性能调优预备阶段
性能测试优化需要从业务代码到中间件的系统性分析。首先应深入了解业务逻辑、代码实现,提前预估风险点,重点关注重复SQL查询、索引优化和设计缺陷。中间件方面需优化Redis缓存命中率、避免大Key问题,精简外部接口调用。MySQL连接数遵循"够用即可"原则。压测时通过倍增并发线程观察CPU消耗变化,并监控磁盘日志写入性能。整个优化过程要循序渐进,逐步定位当前性能瓶颈点进行针对性优化。
2021-05-06 20:09:51
2842

原创 【Furion性能平台】JMeter+Influxdb+Grafana压测监控
JMeter+InfluxDB+Grafana打造压测实时可视化监控方案该方案通过JMeter的Backend Listener实时发送压测数据到时序数据库InfluxDB,再利用Grafana进行可视化展示。InfluxDB作为时序数据库,能够高效存储带时间标签的压测指标数据。Grafana提供丰富的仪表盘功能,可实时监控QPS、响应时间等关键指标。
2021-03-09 08:31:54
3246

原创 【性能方案】理发店模型
本文通过理发店模型形象地解释了系统性能测试的关键概念。模型以3位理发师服务顾客的场景,展示了不同并发情况下的系统表现:当顾客数≤理发师数时效率最高(最佳并发用户数);当顾客数增加时,等待时间延长(最大并发用户数);当顾客数过多时,部分顾客因超时离开(系统崩溃区)。文章进一步将理发店场景与性能指标(吞吐量、响应时间、资源利用率)对应,并讨论了缓存、业务分工、服务器扩展等优化策略。该模型生动地说明了系统负载与用户体验之间的平衡关系,为性能测试提供了直观的理论框架。
2021-02-23 08:35:28
1893

原创 【Furion性能平台】平台架构演进
Furion性能测试平台经历了从单机到分布式再到容器化的架构演进。初期单机模式简便但压力有限,分布式模式解决了并发问题但部署复杂。通过节点容器化实现了统一部署和文件管理,但报告聚合速度成为瓶颈。引入Kafka和Elasticsearch优化数据流后,仍面临海量数据聚合的挑战。平台最终采用渐进式聚合策略,以支撑20万QPS的压测需求。这一系列架构演进体现了性能测试平台在提升并发能力和优化数据处理方面的持续创新
2021-02-04 08:27:49
6446
4

原创 【用例设计】接口用例设计
在接口测试过程中,用例设计是关键中的关键,需要重点关注的一些维度接口测试什么是接口接口就是内部模块对模块,外部系统对其他服务提供的一种可调用或者连接的能力的标准,所谓的接口是模块与模块之间的一种连接接口测试上图为一个典型的接口,一个接口通常是有输入输出的,输入就是我们常见的入参,输出有时有,有时没有。调用相关接口,接口会执行相关处理逻辑接口测试的用例设计,主要从输入和接口处理两方面考虑:针对输入,可按照参数类型进行设计针对接口处理,可按照逻辑进行用例设计针对输出,可根据结果进行分析设计
2021-01-10 23:28:59
5005
6

原创 【调优案例】调优问题总结
性能优化需要系统化分析和持续迭代,主要围绕数据库、Redis、JVM、日志和应用层展开。数据库优化包括索引、SQL查询优化和分库分表;Redis需关注缓存穿透和连接池配置;JVM调优涉及GC和内存参数调整;日志应异步化减少锁争抢;应用层需优化线程池、缓存复用和服务依赖。定位问题可借助jstack、arthas、火焰图等工具,通过多维度监控实现精准调优。
2020-11-13 21:03:42
3299

原创 【性能方案】并发抢答场景
本文探讨了使用JMeter模拟抢答场景的性能测试方案。通过将教师和学生角色放在同一线程组,利用计数器控制线程执行顺序,并用__threadNum指定教师线程。为解决变量共享问题,采用__setProperty方法传递抢答ID;通过同步定时器实现集合点功能,确保学生同时抢答。最后使用循环计数器确保所有学生完成抢答后教师才关闭抢答。该方案较好地模拟了真实抢答场景的并发流程,解决了角色同步、变量共享和时序控制等关键问题。
2020-11-12 09:20:38
2190

原创 【mysql调优】数据库连接池配置优化
数据库连接池通过预先创建和管理数据库连接,优化服务性能。其核心原理是维护连接的复用机制,动态调整连接数,避免频繁创建/销毁连接的开销。配置需考虑并发量、DB规模等因素,关键参数包括最小/最大连接数、超时时间、心跳检测间隔等。建议关闭不必要的检测以减少负载,合理设置空闲时间(如90秒),优先使用ping命令检测。连接池优化可显著减少获取连接耗时,提升整体响应速度。
2020-03-27 23:02:23
7571

原创 【调优工具】线程快照分析
在性能调优时DruidDataSource.getConnection()卡顿,通过jstack获取线程快照分析。主要方法包括:1)文本查看全局锁状态和等待线程数;2)使用JCA工具分析线程状态,重点关注waiting on monitor、waiting on condition和Object.wait()三种状态;3)通过锁地址定位持有锁的线程及其执行的事务。分析发现11个线程等待同一把锁,锁持有线程在执行数据库查询后加密操作。线程快照分析不仅可定位问题,还能判断系统负载,但需结合不同类型线程的状态特征
2020-03-27 13:46:43
5294
2
原创 【RAG实战】RAG系统构建与微调实战
RAG系统的核心部分包括两大部分:召回模块和生成模块。召回模块的性能决定了整个系统的覆盖率,因为如果无法召回包含答案片段的文本,则生成模块将无法完成任务。然而,随着技术的飞速发展,生成模块的任务已不仅仅是汇总召回模块的结果,一些由生成模块主导的RAG系统正逐渐取代传统的召回主导型RAG系统。在本章中,将介绍如何构建适用于RAG场景的向量模型、大模型的指令微调实战,以及如何构建由大模型决策的RAG系统以解决复杂的用户问题。
2025-04-03 09:04:11
705
原创 【RAG实战】基于LangChain实现RAG应用
大模型应用开发框架LangChain被开发者广泛应用。接下来介绍LangChain中与RAG相关的组件,并利用LangChain构建一个可视化的大模型RAG应用,用于回答指定PDF中的相关问题。
2025-03-27 09:26:33
1321
原创 【RAG实战】RAG系统训练
对于一个完整的RAG系统而言,不能像开源博客、框架一样使用独立的召回模块和生成模块。因为召回模块与生成模块相互解耦,这意味着召回模块的召回信息并不能保证生成模块一定能有效地生成正确答案,同时生成模块的训练也没有学习到如何有效地利用召回模块的召回信息。因此,在实际的工业落地时,会考虑更好的训练方法来同时完成召回模块和生成模块的训练。本章将梳理RAG系统训练方法,以及各个训练方法的优缺点,最后完成RAG系统的联合训练实战。
2025-03-21 09:36:01
537
原创 【RAG实战】核心技术与优化
在一个完整的大型RAG流程中,除了需要使用文本召回模型,还涉及提示词的设计、文本切块、向量数据库的选择、召回环节的优化、RAG效果的评估以及LLM能力优化等环节
2025-03-12 10:02:46
788
原创 【向量数据库】向量存储内存
对于海量的向量数据,除了搜索速度以外,内存的开销也是一个巨大的挑战。举个例子,假如向量的维度是128,每个维度的数值是一个32位的浮点型数,那么一个向量占用内存的大小就是:512字节如果库中一共有1千万个向量,那么总共占用的内存:大约4.77GB实际上在真实应用场景中,上千的向量维度和上亿的向量数量都不并稀奇,因此内存开销的问题大约的确是严重的。每个向量都对应着一个切实有用的记录,所以不太可能通过纵向的删除某些向量来节省内存,那唯一的选择只能是想办法横向的把每个向量本身的大小给降下来。
2025-01-06 12:18:53
1464
原创 【向量数据库】搜索算法
最近几年,一种叫做向量数据库的产品,正趁着AI的热潮开始崭露头角。伴随着AI时代的到来,向量将成为一种重要的数据形式,而传统数据库并不适合用来存储和检索向量数据,因此我们大约需要一种专门设计的数据库来处理这些问题。和存储数据表,然后用查询语句进行精准搜索的传统数据库不同,向量数据库存储的是向量数据,而查询过程则是从库中搜索出和查询向量最为相似的一些向量,具有一定的模糊性。
2025-01-06 12:05:49
1447
原创 【向量数据库】向量定义
这里有一些狗,熟悉犬类的朋友应该能很快区分出它们的品种,之所以能做到这一点,是因为我们会从不同的角度来观察它们的特征。比如体型的大小,如果我们使用一个坐标轴来表示这个特征,这些狗将落在不同的坐标点上然而,单纯依靠体型这一个特征还不够,比如金毛和拉布拉多的体型就非常接近所以需要继续观察其他特征,比如毛发的长短,我们再建立一个(毛长的)坐标轴,这样就区分开了金毛和拉布拉多,现在每只狗对应一个二维的坐标点。
2025-01-04 02:49:14
1170
原创 【RAG实战】文本召回模型
文本召回模型是大模型RAG的核心。本章首先介绍文本文本召回模型相关的基础知识,包括如何计算文本相似度和获取句子向量表示等。然后介绍一些经典模型,包括稠密向量检索和稀疏向量检索模型。重排序模型会在本章最后进行介绍,它进一步提高文本召回效果。
2025-01-03 09:39:50
1579
原创 【RAG实战】语言模型基础
语言模型赋予了计算机理解和生成人类语言的能力。它结合了统计学原理和深度神经网络技术,通过对大量的样本数据进行复杂的概率分布分析来学习语言结构的内在模式和相关性。具体地,语言模型可根据上下文中已出现的词序列,使用概率推断来预测接下来可能出现的词汇。接下来主要介绍一些基础的语言模型,如Transformer、自动编码器、自回归模型等。
2024-12-24 09:26:40
1958
原创 【RAG实战】RAG与大模型应用
一种能够生成各类内容的技术,包括文本、图像、音频和合成数据。自2022年底ChatGPT在全球范围内推广以来,基于Transformer解码器结构的大模型已能在短时间内为用户生成高质量的文本、表格、代码,使整个AI领域迈入了新的时代。大语言模型(Large Language Model,LLM)经过海量文本数据的训练后,能将这些文本数据以一种黑盒形式压缩在模型参数中。预训练完成后,模型便掌握了大量的人类知识世界。
2024-12-16 21:29:53
1779
原创 【Java】Java8中的Stream
一、Stream的理解Stream是用函数式编程方式在集合类上进行复杂操作的工具,其集成了Java 8中的众多新特性之一的聚合操作,开发者可以更容易地使用Lambda表达式,并且更方便地实现对集合的查找、遍历、过滤以及常见计算等在Java8中Stream API作为数据渠道,用于操作数组或者集合等数据源。流本身是不存储数据的,只是移动数据,在移动过程中可能会对数据进行过滤,排序或者其它操作,但是,大多数情况下,流操作本身不会修改数据源,比如,对流排序不会修改数据源的顺序。它只是会创建一个新的流,其中包含
2022-05-12 08:26:16
1190
原创 【测试之道】测试发展之路
一、测试团队面临的困局随着互联网的发展,持续集成及DevOps等软件工程方法的提出和普及,软件测试技术也发生了很大的变化。自动化测试、敏捷测试和测试左移等方法论被广泛应用于实践,研发团队对测试技术和测试团队有更高的期待。与此同时,测试团队也面临着不少的困难,其中具有普遍性的有:测试自动化难自动化测试程序编写成本高、执行成本高、维护成本高。测试的技术债在业务高速发展的过程中越积越多:一边修复老的用例,另一边出现新的失败用例一边补充自动化,另一边又因为项目的时间压力遗留了未自动化的用例一些可
2022-05-12 00:38:28
9361
原创 【python】datetime模块计算时间差
一、问题背景最近有小伙伴反馈接口平台的测试计划执行耗时显示有误,比如执行实际时长超过10s,但是报告中显示总耗时小于1s显示耗时统计出现问题二、问题排查开始和结束时间是否有误开始时间:2022-04-24 10:51:23.677632结束时间:2022-04-24 10:51:35.713161可见起止的时间获取没有问题计算方式round((end_time-start_time).microseconds/1000000, 2)计算结果0.04s接下来看看为什么这样的计
2022-04-24 12:07:40
10313
原创 【算法】快速排序
快速排序(Quicksort),又称划分交换排序(partition-exchange sort)算法思想采用"分而治之"的思想,把大的拆分为小的,小的拆分为更小的。对于给定的记录,选择一个基准数,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列实现逻辑设当前待排序序列为R[low:high],其中low ≤ high,如果待排序的序列规模足够小,则直
2022-03-18 09:12:35
594
原创 【python基础】collections的使用
Python的数据类型有list, tuple, dict, str等,collections是实现特定目标的容器,以提供Python标准内建容器dict , list , set和tuple的替代选择Counter字典的子类,提供了可哈希对象的计数功能OrderedDict字典的子类,保留了他们被添加的顺序defaultdict字典的子类,提供了一个工厂函数,为字典查询提供了默认值namedtuple创建命名元组子类的工厂函数deque类似列表容器,实现了在两端快速添加(append
2022-03-16 08:59:06
931
原创 【python基础】reverse和reversed函数及使用
一、reversereverse()是python中列表的一个内置方法(在字典、字符串和元组中没有这个内置方法),用于列表中数据的反转例子:lista = [1, 2, 3, 4]lista.reverse()print(lista)打印结果:[4, 3, 2, 1]其实,lista.reverse()操作的返回值是一个None,其作用的结果需要通过打印被作用的列表才可以查看出具体的效果二、reversedreserved()是python内置函数之一,其功能是对于给定的序列(包括列
2022-03-12 14:55:58
55734
2
原创 【Java】spring事务的实现方式
一、编程式事务管理编程式事务管理,在代码中调用commit()、rollback()等事务管理相关的方法maven pom.xml文件<dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>4.2.4.RELEASE</version></dependency&
2022-03-12 01:00:57
3024
2
原创 【架构】IO多路复用
服务器端编程经常需要构造高性能的IO模型,常见的IO模型有:同步阻塞IO(Blocking IO)传统的IO模型同步非阻塞IO(Non-blocking IO)默认创建的socket都是阻塞的,非阻塞IO要求socket被设置为NONBLOCKIO多路复用(IO Multiplexing)经典的Reactor设计模式,有时也称异步阻塞IO,Java中的Selector和Linux中的epoll都是这种模型异步IO(Asynchronous IO)经典的Proactor设计模式,也称为异步非
2022-03-10 00:46:55
275
原创 【架构】RPC框架的原理
一、为什么要有RPC随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,需要一个治理系统确保架构有条不紊的演进单一应用架构当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本此时,用于简化增删改查工作量的数据访问框架(ORM)是关键垂直应用架构当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。此时,用于加速前端页面开发的Web框架(MVC) 是关键分布
2022-03-08 23:31:56
732
原创 【质量】如何衡量测试用例质量
测试用例的标准不能局限于一个层次,因为测试用例设计类似于软件设计,软件设计有架构设计(结构设计/概要设计)和详细设计,所以对于测试用例的质量标准,也应分为两个层次来考虑:高层次——满足某一个测试目标或测试任务来整体看测试用例,衡量一组测试用例的结构、设计思路和覆盖率等指标低层次——从单个测试用例看,衡量其描述的规范性、可理解性和可维护性等指标一、高层次(high-level)标准高层次标准是从满足某一个特定的测试目标出发来进行定义,分析一组测试用例的设计思路、设计方法和策略,包括测试用例的层次、
2022-03-07 09:13:31
1982
原创 【MySQL】性能分析Explain
一、MySQL性能优化1.1 MySQL Query Optimizer的作用MySQL中有专门负责优化SELECT语句的优化器模块,主要功能:通过计算分析系统中收集到的统计信息,为客户端请求的Query提供他认为最优的执行计划ps:MySQL认为最优的数据检索方式,但不见得是DBA认为是最优当客户端向MySQL请求一条Query命令解析器模块完成请求分类区别出是SELECT时并转发给MySQL Query OptimizerMySQL Query Optimizer的处理过程
2022-03-05 13:16:18
1044
原创 【性能调优】调优的常见思路和方法
本文总结了性能调优的系统性方法,从代码、CPU、内存等方面提供可落地的优化套路。在代码层面,重点关注正则表达式、日志输出、锁优化等高频问题点;CPU问题需区分高负载和高利用率场景,结合线程堆栈和GC情况分析;内存问题则需系统排查堆内存、堆外内存及系统内存使用情况,识别内存泄漏和溢出原因。文章强调复杂问题可能有简单解,优化应遵循空间换时间、并行化等核心思路,避免盲目使用缓存、异步等技术。
2022-03-04 10:18:17
2541
原创 【性能概念】常见的性能测试指标
从性能测试分析度量的角度,性能指标的维度如下:系统性能指标资源性能指标中间件指标数据库指标稳定性指标可扩展性指标可靠性指标接下来从各自维度常见指标及指标含义看看各个性能测试指标一、系统性能指标系统性能指标,常见的有如下几类:响应时间系统处理能力吞吐量并发用户数错误率1.1 响应时间响应时间,简称RT指系统对请求作出响应的时间,可以理解为用户从客户端发起一个请求开始,到客户端接收到从服务器端返回的响应结束,整个过程耗费的时间直观上看,这个指标与人对软件性能的主观感
2022-03-02 20:28:53
16705
4
原创 【JMeter】JMeter的工作原理
一、JMeter简介JMeter是Apache组织开发的基于Java的开源的压力测试工具、接口测试工具可以模拟高并发和多次循环的测试场景,能够对HTTP和FTP服务器进行压力和性能测试, 也可以对任何数据库进行同样的测试,具有可移植性二、压测的原理性能测试的核心三原则: 基于协议,多线程,场景模拟基于协议基于应用层和传输层的各种协议,比如http、udp、ftp和tcp等多线程通过进程下启动线程的方式来模拟并发用户实现负载场景模拟通过模拟用户使用的真实场景,来提高性能测试的准确性J
2022-03-02 10:02:45
6991
原创 【数据构造】构造性能测试的数据
性能测试数据准备分为铺底数据和参数化数据两类。铺底数据需模拟真实业务规模(如半年/年后的数据量),分为压测不访问的纯铺底数据和压测需使用的精细化数据。参数化数据包括接口调用参数和返回结果数据,应遵循业务分布规律(如20%活跃用户产生80%业务)。
2022-03-02 00:52:57
3077
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人