SpringBoot web项目性能监控

devtools/2024/10/24 8:25:46/

新增两个接口:jmap 和 jstack,用于获取 Java 应用程序的内存堆转储(heap dump)和线程转储(thread dump)。

添加依赖:

implementation("commons-io:commons-io:2.11.0")

添加controller的API代码:

java">
import org.apache.commons.io.FileUtils
import org.springframework.boot.actuate.management.HeapDumpWebEndpoint
import org.springframework.boot.actuate.management.ThreadDumpEndpoint
import org.springframework.core.io.Resource
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.ResponseBody
import org.springframework.web.bind.annotation.RestController
import java.io.IOException
import java.nio.charset.StandardCharsets
import javax.servlet.http.HttpServletResponse@RestController
@RequestMapping
class MonitorController(private val threadDumpEndpoint: ThreadDumpEndpoint?,private val heapDumpWebEndpoint: HeapDumpWebEndpoint?
) {@RequestMapping("jmap")@ResponseBody@Throws(IOException::class)fun jmap(response: HttpServletResponse?): String? {if (this.heapDumpWebEndpoint == null) {return "not existed"}val resource: Resource = this.heapDumpWebEndpoint.heapDump(true).getBody()val bytes: ByteArray = FileUtils.readFileToByteArray(resource.getFile())val delete: Boolean = resource.getFile().delete()return download(response!!, resource.getFilename()!!, bytes, delete.toString())}@GetMapping("jstack")@ResponseBodyfun jstack(response: HttpServletResponse): String? {if (threadDumpEndpoint == null) {return "not existed"}val threads = threadDumpEndpoint.textThreadDump()return download(response, "thread-dump.txt", threads.toByteArray(StandardCharsets.UTF_8), "")}private fun download(response: HttpServletResponse, fileName: String, bytes: ByteArray, value: String): String? {response.characterEncoding = "utf-8"response.contentType = "application/octet-stream"response.addHeader("Content-Length", bytes.size.toString())response.setHeader("Content-Disposition", "attachment; filename=$fileName")try {response.outputStream.use { outputStream ->outputStream.write(bytes)outputStream.flush()return value}} catch (exception: Exception) {return exception.message}}
}


http://www.ppmy.cn/devtools/39335.html

相关文章

keystone学习小结

1 keystone middleware 1.1 工作流程 middleware在客户端和服务端之间,会拦截客户端请求并判断请求身份是否是正确合法的,若是,则继续将请求发给其他middleware或app 具体看,干了这些事 1将请求里的auth header去除&#xff0c…

Qt与MySQL连接

QT连接Mysql数据库(详细成功版)-CSD N博客 我的MySQL是64位的,所以我的Qt的套件也需要是64位的 遇到的问题: (available drivers中已经有QMYSQL QMYSQL3,还是not loaded) QSqlDatabase: QMYS…

【BUUCTF】[RoarCTF 2019]Easy Java1

工具:hackbar发包,bp抓包。 解题步骤:【该网站有时候send不了数据,只能销毁靶机重试】 这里的登录界面是个天坑【迷魂弹】 直接点击help,然后进行打开hackbar——通过post请求,再通过bp抓包,…

重生我是嵌入式大能之串口调试UART

什么是串口 串口是一种在数据通讯中广泛使用的通讯接口,通常我们叫做UART (通用异步收发传输器Universal Asynchronous Receiver/Transmitter),其具有数据传输速度稳定、可靠性高、适用范围广等优点。在嵌入式系统中,串口常用于与外部设备进…

SSH远程管理

SSH远程连接协议 SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录、远程 复制等功能。SSH 协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令,SSH 为建立在应用层和传输…

多台服务器共享python虚拟环境和Linux安装python虚拟环境

文章目录 一、新增服务器环境搭建1. python3 环境搭建2.必要软件安装3. 目录挂载1 ./toolchain 挂载:2. /virtualenvs挂载: 4. 安装驱动和sdk 二、多台服务器共享python虚拟环境 一、新增服务器环境搭建 1. python3 环境搭建 16.04 系统默认 python3.5&…

大数据与会计专业主要学什么课程

大数据与会计专业是一个结合了传统会计知识与现代大数据技术的交叉学科,旨在培养既懂会计又熟悉大数据分析的复合型人才。该专业的学生将会学习以下主要课程内容: 会计基础课程:包括基础会计、财务会计、成本会计、管理会计等,这些…

初识kafka

一、发布与订阅系统 发布与订阅系统:数据的发送者不会直接把消息发送给接收者;发布者以某种方式对消息进行分类,接收者通过订阅他们来接收特定类型的消息。发布与订阅系统也是事件驱动型程序的关键组件 二、初识Kafka kafka是一款基于发布…