---
title: 基于DevKit Java性能分析工具的调优实践——锁竞争问题-官方技术文章-鲲鹏社区
description: 本文使用DevKit Java性能优化工具对运行中的Java程序进行在线分析和采样分析，找到程序中的锁竞争问题，并根据分析结果进行优化修改，从而实现Java程序最佳运行。
keywords: DevKit,Java,性能分析工具,的调优实践,锁竞争问题,官方技术文章,鲲鹏社区,调优概述
url: https://www.hikunpeng.com/developer/techArticles/20251229-5?envFlag=1
section: (其他)
---

# 基于DevKit Java性能分析工具的调优实践——锁竞争问题-官方技术文章-鲲鹏社区

URL: https://www.hikunpeng.com/developer/techArticles/20251229-5?envFlag=1
描述: 本文使用DevKit Java性能优化工具对运行中的Java程序进行在线分析和采样分析，找到程序中的锁竞争问题，并根据分析结果进行优化修改，从而实现Java程序最佳运行。
关键词: DevKit,Java,性能分析工具,的调优实践,锁竞争问题,官方技术文章,鲲鹏社区,调优概述

官方技术文章 [了解详情](https://www.hikunpeng.com/zh/developer/techArticles)

基于DevKit Java性能分析工具的调优实践——锁竞争问题

基于DevKit Java性能分析工具的调优实践——锁竞争问题

DevKitjavajdk性能调优

发表于 2025/12/29

0

# 1 调优概述

鲲鹏DevKit是一款提供涵盖迁移、测试、性能调优及系统诊断等各环节的开发使能工具集。其中，DevKit Java性能分析工具是针对基于鲲鹏的服务器上运行的Java程序的性能分析和优化工具，能图形化显示Java程序的堆、线程、锁、垃圾回收等信息，收集热点函数、定位程序瓶颈点，帮助用户采取针对性优化。本文使用Java性能优化工具对运行中的Java程序进行在线分析和采样分析，找到程序中的锁竞争问题，并根据分析结果进行优化修改，从而实现Java程序最佳运行。

# 2 环境要求

| 项目 | 说明 |
| --- | ---|
| 服务器 | TaiShan 200服务器（型号2280） |
| CPU | Kunpeng 920 |
| OS | CentOS 7.6 |
| 调优工具 | Kunpeng DevKit Java性能分析工具 |

# 3 前提条件

1. 服务器和操作系统正常运行。
2. PC端已经安装SSH远程登录工具。
3. 需要优化的Java程序。

# 4 调优思路

1. 使用Java性能优化工具对Java进程进行在线分析；
2. 使用Java性能优化工具对Java进程进行采样分析；
3. 针对性能的瓶颈点进行性能优化；
4. 观察优化后的Java程序，判断问题是否解决。

# 5 调优过程

## 5.1对程序进行在线分析，在概览页签下观察每种状态的线程数量

发现有大量线程处于阻塞状态，有锁竞争的可能

发现有大量线程处于等待状态，有锁竞争的可能

## 5.2切换到CPU->线程列表，执行多次线程转储操作

## 5.3切换到线程转储页签

观察多个时间点线程转储的锁分析图，发现有多个线程同时竞争同一把锁，的确出现了锁竞争的情况，还可以发现这把锁不是JUC提供的工具锁，程序中使用的是 synchronized,如果锁竞争比较激烈，该类锁就会升级成重量级，会导致上下文切换比较严重，从而影响性能和关键业务的阻塞。

如果程序使用的是JUC提供的锁，锁分析图如下：

## 5.4切换到线程转储->原始数据

根据从锁分析图中找到的对应锁的地址，在原始数据中进行搜索，可以看出有多个线程在获取这把锁，这把锁的类型以及竞争这把锁的代码位置

## 5.5发现问题并解决

根据线程转储中提供的锁的类型和位置，咱们就可以分析代码的业务逻辑，从而找到调优方案。下面介绍两种锁竞争的调优方法，仅供参考。

- 情况一：使用synchronized，但在业务上竞争比较激烈：

将 synchronized 替换成 JUC 提供的工具锁（ReentrantLock等）

- 情况二：使用JUC 提供的工具锁，但在业务上竞争比较激烈

这种情况需要加入其他策略去提高性能，如加入线程池，限制竞争锁的线程数；如果是读写分离的场景，可以考虑使用ReadWriteLock。从业务的实际情况去考虑。

# 6实践总结

Java中的锁竞争问题一旦发生很难定位具体的代码位置，因为程序干扰因素比较多，但是可以根据线程转储去定位，其中的栈跟踪信息提供了发生锁竞争的代码位置。如果发现多个线程都试图锁住相同的锁地址，说明应用正面临锁竞争。

在进行其他程序调优时，需要根据鲲鹏DevKit性能优化工具采集分析的实际结果和对应的优化建议进行调优操作。具体的调优思路可以参考本次实践。

本页内容
