java性能调优

【Java性能调优】(性能调优流程)从系统评估到性能调优 调优的流程通常分为衡量系统现状,设定调优目标,寻出性能瓶颈,分析需求场景,指定优化策略——再次衡量系统这样的循环。 阅读详情

最近生产上项目总是在运行2天左右就会内存撑满,导致服务down调。需要人为的频繁重启。分析了一下原因:

1.应用层面:

首先检查代码,是否存在编码不标准导致内存溢出:如IO流的关闭,是否重复申请大对象等。

(1)代码可读性差,无基本编程规范;

(2)对象生成过多或生成大对象,内存泄露等;

(3)IO 流操作过多,或者忘记关闭;

(4)数据库操作过多,事务过长;

(5)同步使用的场景错误;

(6)循环迭代耗时操作等。

经粗略检查,显示的编码似乎并没有问题

2.数据库层面:

数据库层面应该不会导致内存撑满的现象。当然数据库在优化服务性能上也是非常重要的一点,如优化sql,事物,索引等。

通常来说,对于数据库层的调优我们基本上会从以下几个方面出发:

(1)在 SQL 语句层面进行优化:慢 SQL 分析、索引分析和调优、事务拆分等;

(2)在数据库配置层面进行优化:比如字段设计、调整缓存大小、磁盘 I/O 等数据库参数优化、数据碎片整理等;

(3)从数据库结构层面进行优化:考虑数据库的垂直拆分和水平拆分等;

(4)选择合适的数据库引擎或者类型适应不同场景,比如考虑引入 NoSQL 等。

3.框架层面:

这个层面的优化一般比较难,涉及到的架构的问题,应该在框架搭建时就应该考虑到性能问题。比如:

引入一些新的计算或者存储框架,利用新特性解决原有集群计算性能瓶颈等;或者引入分布式策略,在计算和存储进行水平化,包括提前计算预处理等,利用典型的空间换时间的做法等;都可以在一定程度上降低系统负载;

3.JVM层面:

所谓的JVM 调优一般就是利用JVM 提供的一些工具分析内存的占用及垃圾回收GC情况,常用的工具如jps,jstat,jmap,jconsole.

所以我们利用这几个工具对生产上的问题现场进行了保存:

jstat -gc 5157 250 10  //对java进程5157 查询GC 情况,没250秒一次,输出10次。

jmap 5157 //某个java进程(使用pid)内存内的所有‘对象’的情况(如:产生哪些对象,及其数量)

jmap -histo 5157|more

jmap -dump:format.b.file=/home/dump.bin 5157 //输出dump文件,即进程的内存内的所有对象情况。

jhat -port 999 /home/dump.bin //将dump文件加载到内存;

然后在浏览器内输入:服务器地址:9999 可查看到内存内的对象情况。结果发现:

 我们这两天进行了分析,发现了一个spring cloud的问题,针对spring cloud的metric数据统计,我们对restTemplate使用方式违反了spring cloud内部的使用约定(也算是spring cloud的一个bug),导致统计异常,堆占用不断增加,具体可见下文:

https://github.com/spring-cloud/spring-cloud-netflix/issues/947

针对这个问题,我们目前无法修改我们的使用方式,只能禁用spring cloud的servo metric统计功能,配置如下:

spring:

  autoconfigure.exclude: org.springframework.cloud.netflix.metrics.servo.ServoMetricsAutoConfiguration

  metrics.servo.enabled: false

  cloud.netflix.metrics.enabled: false

将以上三个配置添加到各自的配置文件中,实现对servo统计的禁用。

具体效果对比如下:



 

这个层面的优化一般比较难,涉及到的架构的问题,应该在框架搭建时就应该考虑到性能问题。比如:


标准的restTemplate使用方式可参考下面的文章:

http://blog.youkuaiyun.com/u012702547/article/details/77917939


[BUG处理]springcloud gateway 内存泄露 springcloud gateway 内存泄露 LEAK: ByteBuf.release() was not called before it's garbage-collected 阅读详情

相关推荐

JVM调优知识及实践:提升Java程序性能的艺术

JVM调优是提升Java程序性能的重要手段。通过掌握JVM的基本知识和调优技巧,并结合实践案例进行学习和总结,我们可以更好地应对程序性能问题,提高系统的稳定性和可靠性。希望本文能够帮助到广大Java程序员在JVM调优方面取得更好的进展。

勤劳的小琪 2349

SpringCloud Gateway堆外内存溢出排查

生产环境网关模块偶发的OutOfDirectMemoryError错误排查起来困难且曲折,2021-02-05号也出现过此问题,起初以为是 JVM 堆内存过小 (当时是 2g) 导致,后调整到8g(2月5号调整)。但是经过上次调整后5月7号又出现此问题,于是猜测可能是由于网关模块存在内存泄露导致。症状报错详情网关模块偶现OutOfDirectMemoryError...

天行健,君子以自强不息;地势坤,君子以厚德载物。 5367

详解SpringCloudGateway内存泄漏问题

主要介绍了详解SpringCloudGateway内存泄漏问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

SpringCloudGateway 3.1.4版本 Netty内存泄漏问题解决

解决 Gateway产生的堆外内存泄漏 io.netty.util.internal.OutOfDirectMemoryError: failed to allocate 2048 byte(s) of direct memory (used: 2095623, max: 2097152)

新菜嚻最火的博客 4046

AD936x Evaluation Software 详细配置

作者:ShownSun 工作室:时沿科技 文章目录AD936x Evaluation Software详细配置1 系统概述2 AD9361 Wireless Transceiver Evaluation Setup2.1 标签描述2.2 用户参数2.3详细配置3 AD936x RF Wizard3.1 标签描述3.2 用户参数3.3 详细配置4 AD936x Digital Filter Wizard4.1 标签描述4.1.1 时钟配置4.1.2 滤波器配置4.1.3 接收滤波器配置4.1.4 发射滤..

ShownSun博客 5192

华硕主板UEFI模式下安装Ubuntu与Windows双系统全攻略

本文详细讲解了在华硕主板UEFI模式下安装Ubuntu与Windows双系统的完整流程。从安装前的BIOS关键设置(如处理安全启动与CSM)、使用GPT分区表,到在Windows中安全分配空间、手动创建Ubuntu分区,最后完成引导配置,提供了避免常见错误的实用技巧,确保双系统稳定共存。

weixin_29199873的博客 345

Spring Cloud微服务中的内存泄漏问题定位与解决方案

文章摘要 微服务架构下,某核心服务因缓存未设置清理机制导致内存泄漏,频繁触发OOM。通过heap dump分析定位到ConcurrentHashMap缓存对象无限堆积的问题。解决方案包括:引入Caffeine缓存库设置容量限制和过期策略,完善资源释放机制,加强JVM监控报警。优化后内存稳定,GC负载降低,并形成内存管理规范。经验表明:微服务需定期heap dump分析,合理设计缓存策略,监控报警是保障稳定性的关键。

程序员陆通 1285

无人机飞控算法开发实战:从零到一构建企业级飞控系统

本文系统介绍了无人机飞控算法开发的完整流程,包括飞行动力学模型建立、传感器校准与数据融合、主流控制算法实现(PID、ADRC、EKF)以及企业级飞控系统架构设计。通过结合开源飞控框架(如PX4)和实际工程经验,提供了完整的代码实现示例,帮助学者从零开始掌握无人机飞控开发的核心技术。文中详细讲解了四旋翼无人机的动力学模型、传感器校准方法、EKF状态估计算法、PID和ADRC控制算法的实现,以及MAVLink通信协议的集成。最后,总结了完整的飞控系统开发流程和未来发展趋势。

全栈 3401

Java性能调优笔记

Java性能调优笔记 调优步骤:衡量系统现状、设定调优目标、寻找性能瓶颈、性能调优、衡量是否到达目标(如果未到达目标,需重新寻找性能瓶颈)、性能调优结束。 寻找性能瓶颈 性能瓶颈的表象:资源消耗过多、外部处理系统的性能不足、资源消耗不多但程序的响应速度却仍达不到要求。 资源消耗:CPU、文件IO、网络IO、内存。 外部处理系统的性能不足:所调用的其他系统提供的功能或数据库操作的响应速度不够。 资源消耗不多但程序的响应速度却仍达不到要求:程序代码运行效率不够高、未充分使用资源、程序结构不合理。

yang_net 2万+

更换光猫的原理与方法

当你给装维打电话说你需要更换光猫时,对于装维来说,他并不需要知道怎么更换,他只需要生成一张工单,由后台进行业务操作后,在去用户家把新光猫给装好即可,此时装维到底起到了什么作用呢?我想可能只是运输员吧,把一个设备从一个地方运到另一个地方罢了,此时并不能指望装维做什么,因为本质上来说装维的能力真的很差很差,我是不知道那些装维哪来的勇气做视频,还说自己什么什么能力很强?很强吗?吹牛的技术确实很强。 更换光猫之前,需要先明白为什么要更换光猫,怎么更换光猫,更换后不能用怎么办?怎么才能更换成功,换光猫以后被限速了怎么

qq_34146290的博客 1万+

LeRobot 入门教程(二)强化学习训练及 SmolVLA 模型微调

本文介绍了LeRobot框架中基于人类在环的样本高效强化学习(HIL-SERL)工作流,包含真实机器人训练和模拟环境训练两大模块。在真实机器人部分,详细说明了从配置设置、工作空间边界确定、演示数据收集、奖励分类器训练到演员-学习者架构部署的全流程,并强调了人类干预的关键作用。同时介绍了适用于模拟训练的gym_hil环境及其配置使用方法。最后,文章提供了微调SmolVLA基础模型的指南,包括数据集收集、微调步骤和模型评估方法。该工作流实现了人机协作的高效强化学习,适用于各类机器人操作任务。

2506_90492529的博客 3896

Java 性能调优

建议优先解决性能瓶颈最严重的部分,采用"测量-优化-验证"的循环方式进行调优。-XX:InitiatingHeapOccupancyPercent=45 # 触发并发标记的堆占用比。// 根据CPU核心数调整。-Xms4g -Xmx4g -Xmn2g # 初始堆=最大堆=4G,新生代2G。新生代占比约为总堆的1/3到1/2。// 代替wait/notify。// 错误示范:循环内创建对象。JVM参数是否合理设置?// 优化:重用对象。

chayangtong5109的博客 1215

基于 STM32 的智慧图书馆智能控制系统设计与实现

智慧图书馆智能控制系统集成环境调控、安全监控、借阅管理与信息推送功能,通过 STM32 主控芯片联动传感器、执行器及云平台,实现图书馆智能化管理。系统架构分为感知层(传感器)、控制层(STM32 主控)、执行层(继电器 / 显示屏)及云端层(数据交互),支持温度自动调节、灯光自控、火情安防监控、天气推送及 RFID 借还书管理。本系统通过 STM32 实现多传感器融合与设备控制,结合 RFID 与云平台技术,构建了集环境智能调控、安全监控、便捷借阅于一体的智慧图书馆解决方案。

weixin_42300449的博客 2200

Java性能调优

对于调优这个事情来说,一般就是三个过程: 性能监控:问题没有发生,你并不知道你需要调优什么?此时需要一些系统、应用的监控工具来发现问题。 性能分析:问题已经发生,但是你并不知道问题到底出在哪里。此时就需要使用工具、经验对系统、应用进行瓶颈分析,以求定位到问题原因。 性能调优:经过上一步的分析定位到了问题所在,需要对问题进行解决,使用代码、配置等手段进行优化。 ...

weixin_44227923的博客 396

可疑物品遗留检测系统:基于YOLOv8的智能安防解决方案

数据采集与标注模块:负责收集和标注可疑物品图像数据模型训练模块:基于YOLOv8算法训练检测模型推理检测模块:加载训练好的模型进行实时检测用户界面模块:提供友好的操作界面和可视化结果展示报警模块:当检测到可疑物品时触发报警机制:包含多种暴力场景和可疑物品SUAVe:监控场景下的异常行为与物品数据集:包含多种可疑物品自建数据集:针对特定场景收集的数据背包(backpack)手提箱(suitcase)无人看管的包裹(package)可疑箱子(box)

YOLO 435

【开发必备插件】iframe嵌套报“拒绝连接请求”的本地解决方法

关键词:iframe 拒绝连接、X-Frame-Options、Chrome 插件、前端调试、Allow X-Frame-Options前几天我在本地项目里调试一个第三方网站的嵌入页面时,遇到了一个非常经典的报错:xxx.com 拒绝了我们的连接请求。熟悉的老前端们一眼就知道——这是。但对于日常开发来说,我们经常需要在本地测试 iframe 嵌套外部页面(比如嵌第三方登录页、支付页、可视化报表系统等)。而线上站点配置了或DENY时,就会直接导致 iframe 加载失败。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1540

Java 性能调优实战

Java 性能调优实战》课程覆盖了 Java 性能调优的各个方面,涵盖从 Java 编程到多线程调优、JVM 性能监控、数据库优化和分布式系统的调优。每个模块都提供了详细的讲解和实际代码示例,帮助开发者在实际开发中提高系统的性能和可扩展性。Java 编程性能调优:深入讨论了常见的性能瓶颈及其优化方案,帮助开发者提高代码效率。多线程性能调优:通过优化线程池、锁机制和协程,帮助开发者在并发场景下提高系统吞吐量。JVM 性能监控及调优。

wolf23151269的博客 1100

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Java性能调优及排查

在使用Java开发应用时难免会遇到应用运行速度慢的性能问题。性能问题可能对系统稳定性、用户体验和应用程序的质量产生很大的影响。因此Java性能调优变得尤为重要。

BXA 2351

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

java性能调优实战学习笔记

这是极客时间专栏《java性能调优实战》的部分学习笔记,个人感觉这个专栏内容不深,适合初学者,我只看了编程性能调优和数据库性能调优两块,其他的暂时不打算看了,后续有时间再看吧 文章目录如何制定性能调优标准如何制定性能调优策略慎重使用正则表达式如何减少回溯问题?正则表达式的优化ArrayList和LinkedListStream如何提高遍历集合效率HashmapMySQL调优之SQL语句:如何写出高性能SQL语句?慢 SQL 语句的几种常见诱因优化 SQL 语句的步骤通过 EXPLAIN 分析 SQL 执行

enjoycoding悦码 2180

Java 性能调优实战之概述

我们知道性能调优可以使系统稳定,用户体验更佳,甚至在比较大的系统中,还能节约资源。但是在项目的开始阶段,我们没有必要过早地介入性能优化,只需在编码的时候保证其优秀、高效,以及良好的程序设计。在完成项目后,我们就可以进行系统测试了,我们可以将以下性能指标,作为性能调优的标准,响应时间、吞吐量、计算机资源分配使用率、负载承受能力。

Java小菜鸟 650

Java程序性能调优的基本知识和JDK调优

一 基本知识   1.1 性能是什么     在性能调优之前,我们首先来了解一下性能是什么?关于性能,我想每个学习过Java的人都能列出几点,甚至可以夸夸其谈。在《Java TM Platform Performance》一书中,定义了如下五个方面来作为评判性能的标准:      1) 运算的性能——哪一个算法的执行性能最好?     2) 内存的分配——

m13286282的专栏 1002

Java 编程性能调优

JDK 是 Java 语言的基础库,熟悉 JDK 中各个包中的工具类,可以帮助你编写出高性能代码。课程从基础的数据类型讲起,涉及容器在实际应用场景中的调优,还有现在互联网系统架构中比较重要的网络通信调优。为了保证线程的安全性,通常会用到同步锁,这会为系统埋下很多隐患;除此之外,还有多线程高并发带来的性能问题,这些都会在这个层级重点讲解。Java 应用程序是运行在 JVM 之上的,对 JVM 进行调优可以提升系统性能。数据库最容易成为整个系统的性能瓶颈,这里刘超会重点解析一些数据库的常用调优方法。

感冒石头的博客 1514

JAVA性能调优

java性能调优,JVM调优

weixin_50697861的博客 1531
上一篇: sql 链接异常connection reset
下一篇: JAVA checkedException & uncheckedException
雨冰
博客等级 码龄15年 18粉丝 60原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值