性能调优
文章平均质量分 89
调优案例
sysu_lluozh
这个作者很懒,什么都没留下…
展开
-
【性能调优】调优的常见思路和方法
在通过工具得到异常指标,初步定位瓶颈点后,如何进一步进行确认和调优?在这里提供一些可实践、可借鉴、可参考的性能调优套路,即:如何在众多异常性能指标中,找出最核心的那一个,进而定位性能瓶颈点,最后进行性能调优以下会按照代码、CPU、内存、网络、磁盘等方向进行组织,针对某一个优化点系统的套路总结,便于思路的迁移实践一、应用代码相关遇到性能问题,首先做的是检查否与业务代码相关——不是通过阅读代码解决问题,而是通过日志或代码,排除掉一些与业务代码相关的低级错误性能优化的最佳位置是应用内部,比如:查看业务原创 2022-03-04 10:18:17 · 2257 阅读 · 0 评论 -
【性能调优】Python集成Java的服务OOM问题分析经历
一、问题背景在一个遍历服务中,同时运行5个设备执行遍历任务时,快速出现如下错误容器ExitCode :137, 原因:OOMKilled该服务是通过python程序唤起执行Java任务二、资源占用既然是OOM,先看一下服务的资源占用发现系统中总内存使用较低,且python和Java进程的内存使用不高,那为什么会出现OOM的情况呢?注:其实这里查看的是整个服务器的内存占用,该服务器内容总共25G,所以内存占用不高三、python内存分析使用memory_profiler分析python的原创 2021-12-07 18:31:52 · 1233 阅读 · 1 评论 -
【性能调优】接口平台服务性能优化
一、问题背景用户反馈接口平台后台服务接口处理时间慢,导致加载页面或某些操作请求时间特别长,很影响用户体验可以看到接口请求普遍很慢,POST请求尤其明显二、代码分析可以分析对应几个接口的源码,发现大部分操作均是db操作和数据处理,并未发现可疑点三、cProfiler分析使用【调优工具】python性能分析工具cProfiler针对耗时特别长的接口,比如修改接口的这个接口进行分析@do_cprofile('./mkm_modify_iv.prof')def modify_iv_content(原创 2021-08-03 13:22:18 · 380 阅读 · 0 评论 -
【性能调优】一次监控数据错误的性能调优经历
针对自建存储服务的回调接口调优时,qps一直卡在1w,但是从各种监控和分析并未找到性能瓶颈,最后发现竟然因为数据库cpu监控不准备误导,特此记录整个调优的过程一、源码分析回调接口源码性能分析:1次redis查询2次db操作,其中1次查询,1次写入操作5次本地缓存读取1次外部接口调用其中最大的性能瓶颈很有可能在db操作中二、资源配置服务配置mysql一主一从 16c 128gredis16g 8节点callback服务2c 4g三、试验分析接原创 2021-05-24 00:09:16 · 3634 阅读 · 4 评论 -
【性能调优】单接口性能调优预备阶段
一、现状在性能测试一开始就针对全接口全场景进行性能压测并调优,如果再加上对业务代码不熟悉,基本上就是熟悉的尴尬场景:阶梯递增并发线程数获得服务性能拐点调整服务端数据库连接池配置调整JVM中新生代老年代等配置优化监控获得的慢sql语句利用工具分析线程堆栈信息不了解业务逻辑,不了解具体代码实现,基本上这些招数使用后对于性能优化就毫无头绪且无能为力了接下来看看调优从开始准备到调优完成整个流程中更为有针对性的方式,需要在调优前更加充分的准备,更加深入的分析业务实现代码,且提前预估性能风险点,有利原创 2021-05-06 20:09:51 · 2795 阅读 · 0 评论 -
【性能调优】应用系统性能画像
企业级应用系统开发过程中,会遇到如下问题:进程消耗cpu,内存利用率暴增如何定位代码数据库连接数被耗尽怎么办各种OOM如何预防线程死锁,锁争用上下文切换太频繁那怎么办无论多复杂的系统运行在linux上,其实就是一个进程,任何东西在操作系统层面都是以文件的形式存储的,进程也不例外,所以从操作系统的层面只需要关注进程和线程即可linux上部署一个Tomcat的程序,产生的是一个进程,...原创 2020-03-13 01:03:10 · 1158 阅读 · 0 评论 -
【性能调优】高并发缓存穿透
普通缓存使用当系统接收到一个获取数据的请求时,系统就会先从缓存中查找数据,而系统从缓存中查找数据时分两种情况:如果缓存中有数据的话直接从缓存中读取数据,然后返回给请求方如果缓存中没有那就从数据库中读取数据,然后在更新到缓存中,下次再获取这条数据时可以直接从缓存中读取在并发较高时不建议使用缓存过期的策略,缓存一直存在,通过后台系统更新缓存系统中的数据,达到数据一致性的目的上面的方案在并...原创 2020-02-27 13:29:09 · 478 阅读 · 0 评论 -
【性能策略】限流策略
如何保证在流量突增的情况下,仍然保证系统的稳定性,或者说如何避免由于并发访问量远远超过系统能够正常承载的并发量而导致的雪崩第一层限流:合法性限流仅仅限制合法的用户请求能够抵达服务器,而将一些非法的请求全部进行拦截什么是合法性限流?实际请求的用户可能是人,也可能是机器人,并且还可能存在同一用户反复操作的行为验证码验证码还有一个作用,可以拉长用户的访问时间,比如1秒中有100w用户同...原创 2020-02-24 13:28:35 · 1643 阅读 · 0 评论 -
【性能分析】内存泄露C++程序
在使用UMDH轻量级内存泄露分析工具前,创建一个内存泄露的C++程序工具:Visual Studio 2013 语言:C++创建C++项目编写代码#include "stdafx.h"#include <cstring>#include <iostream>#include <windows.h>#include<sstream>using namespace std;int _tmain原创 2017-06-22 21:12:29 · 797 阅读 · 2 评论 -
【性能指标】性能测试数据分析
TPS:每秒处理事务数。一般用于衡量服务器的处理能力,或者说服务器的吞吐率场景:测试场景系统资源:主要是CPU、内存、IO成功率:超时、业务失败耗时:业务处理时间性能指标-vmstatvmstat 命令报告关于内核线程、虚拟内存、磁盘、陷阱和 CPU 活动的统计信息一般来说,id + us + sy = 100,一般认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率原创 2016-08-08 21:08:33 · 5278 阅读 · 0 评论 -
【windows调优】程序运行卡顿分析
1、检查系统是否有中毒的特征2、检查软件/硬件的配置是否符合软件的推荐标准3、确认当前的系统是否是独立,即没有对外提供什么消耗CPU资源的服务4、如果是C/S或者B/S结构的软件,需要检查是不是因为与服务器的连接有问题,或者访问有问题造成的5、在系统没有任何负载的情况下,查看性能监视器,确认应用程序对CPU/内存的访问情况原创 2015-10-10 16:30:49 · 10730 阅读 · 0 评论 -
【性能调优】cpu过载问题分析
如何定位代码中哪段导致CPU过载?步骤一:通过top或者pidstat命令,定位具体的进程号,如下图1top1步骤二:top -p 1后,按住shift+H 开启显示详细的线程步骤三:把1855转换成16进制因为线程中的线程程序号是以16进制存储的printf “%x\n” 18651步骤四:再通过jstack命令和上面定位的线程号分析线程正在处理的事情jstack -l 进程...原创 2020-03-19 02:03:20 · 2118 阅读 · 0 评论 -
【性能调优】线程异常问题分析
线程异常关注两个东西,一个是线程状态,一个是线程的连接数应用设计的时候需要考虑资源的限制,才能避免应用在某些时候因为资源过度而崩溃,线程数的控制非常重要。程序无限制的创建最终导致不可控,特别是隐藏在代码中的创建线程的方法当系统的SY值过高时,表示linux要花费更多的时间来进行线程的切换。java造成这样现象的主要原因是创建的线程比较多,这些线程都处于不断的阻塞、锁等待、IO等待和执行状态的变...原创 2020-03-19 02:05:36 · 2151 阅读 · 0 评论 -
【性能调优】OOM问题分析
OOM发生的一般原因:资源不够可能是内存分配过小,而正常业务却使用了大量的内存申请的资源太多某一个对象被频繁的申请,却没有被释放,内存不断泄露,最终导致内存耗尽资源耗尽某一个资源被频繁的申请,系统在资源耗尽,例如不断的创建线程,不断的发起网络连接定位方法:步骤一:确认内存本身分配是不是过小jmap -heap 进程id步骤二:找到最耗费内存的对象jmap -histo...原创 2020-03-19 02:07:44 · 411 阅读 · 0 评论 -
【mysql调优】数据库连接池配置优化
在性能调优过程中,通过监控数据经常发现接口花费大量时间在获取数据库连接中,那如何通过优化数据库连接池的配置来优化服务的性能呢?什么是数据库连接池创建数据库连接是一个很耗时的操作,也容易对数据库造成安全隐患。所以,在程序初始化的时候,集中创建多个数据库连接,并把他们集中管理,供程序使用,可以保证较快的数据库读写速度,还更加安全可靠官方解释:数据库连接池(Connection pooling)是程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态地对池中的连接进行申请,使用,释放。原创 2020-03-27 23:02:23 · 7297 阅读 · 0 评论 -
【mysql调优】分析mysql性能的语句
1.系统mysql的进程数ps -ef | grep “mysql” | grep -v “grep” | wc –l2.Slave_runningmysql > show status like ‘Slave_running’;如果系统有一个从复制服务器,这个值指明了从服务器的健康度3.Threads_connectedmysql > show status like ‘...原创 2020-03-30 22:31:25 · 484 阅读 · 0 评论 -
【调优案例】调优问题总结
数据库索引 – 扫描行数、慢查询查询sql语句连接池 – initial-size、max-active、min-idle testOnBorrow testWhileIdle主库从库配置JVMfgc和ygc频繁 – -Xms、-Xmx、Xmnredis缓存穿透 - 缓存过期时间连接池配置min-idle、max-idle大key 热key日志锁争抢异步、logback、log4j2、入参打印开关服务dubbo连接池配置 dubbo.protocol.threads – 线原创 2020-11-13 21:03:42 · 3248 阅读 · 0 评论 -
【JVM调优】gc垃圾回收机制
目前最主流的四个垃圾回收器分别是:Serial收集器(常用于单CPU环境)、Throughput(或者Parallel)收集器,Concurrent(CMS)收集器和G1收集器对于程序员而言,java最诱人的特性之一是不需要显式地管理对象的生命周期,我们可以在需要时创建对象,对象不再使用时,会由JVM在后台自动进行回收简单来说,垃圾收集由三步构成:查找不再使用的对象释放这些对象所关联的内存对堆的内存布局进行压缩整理如果垃圾收集进行时,没有任何应用程序线程在运行,那么完成这些操作将是一件轻松愉原创 2020-12-03 00:29:08 · 370 阅读 · 0 评论 -
【性能指标】Windows性能指标分析
内存分析内存分析需要使用的计数器:Memory性能对象和Physical Disk性能对象的计数器。 内存分析的主要方法和步骤:查看Memory->Available Mbytes指标 Available Mbytes: 描述: Available MBytes 指能立刻分配给一个进程或系统使用的物理内存数量,以 MB 为单位表示。它等于分配给待机(缓存的)、空闲和零分页列表内存的总和。原创 2016-02-27 15:27:58 · 6105 阅读 · 0 评论 -
【调优案例】嵌入式系统软件书写卡顿问题
在嵌入式Win7系统(i5 4G)中运行EN3,书写时间超过5秒后,出现卡顿跳笔的现象。定位问题的时候,判断为软件每5秒自动保存功能导致在自动保存时系统资源飙高故书写卡顿跳笔,但将自动保存时间改为10秒此问题并未得到规避缓解查看系统资源不难发现CPU、内存和磁盘会有一个峰值,但网络I/O都在一个比较高的值断开PC端的网络情况,继续进行笔迹书写查看资源使用情况,发现磁盘最长活动时间间断性的高达100%原创 2017-01-18 20:11:04 · 2183 阅读 · 9 评论 -
【调优案例】druid testOnBorrow参数问题
在性能优化调优数据库连接池配置调优效果修改前:spring.datasource.type = com.alibaba.druid.pool.DruidDataSourcespring.datasource.druid.initial-size = 20spring.datasource.druid.max-active = 50spring.datasource.druid.min-idle = 20spring.datasource.druid.max-wait = 5000spring原创 2020-09-24 09:31:38 · 11951 阅读 · 5 评论 -
【调优案例】rabbitMQ压测
线上环境出现问题,由于某数据上报接口的大量请求,导致rabbitmq的消息队列中Ready消息超过300W条,rabbitmq挂掉信息确认确认线上数据库配置 线上数据库几主几从,多少个分库 数据库配置文件须和线上保持一致(bin_log) 数据库容量应和线上环境一致确认服务器是否有第三方系统依赖最大多少个线程生产消息和最大多少个线程消费消息确认线上并发数据原创 2017-11-07 10:49:18 · 23438 阅读 · 2 评论