使用 MBean 和 日志查看 Tomcat 線程池核心屬性數據

文章目錄

  • CustomTomcatThreadPoolMBean
  • CustomTomcatThreadPool


CustomTomcatThreadPoolMBean

com.qww.config;public interface CustomTomcatThreadPoolMBean {String getStatus();
}

CustomTomcatThreadPool

package com.qww.config;import com.alibaba.fastjson.JSON;
import org.apache.tomcat.util.threads.ThreadPoolExecutor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.web.context.WebServerApplicationContext;
import org.springframework.boot.web.embedded.tomcat.TomcatWebServer;
import org.springframework.stereotype.Service;import javax.annotation.PostConstruct;
import javax.management.InstanceAlreadyExistsException;
import javax.management.MBeanRegistrationException;
import javax.management.MBeanServer;
import javax.management.MalformedObjectNameException;
import javax.management.NotCompliantMBeanException;
import javax.management.ObjectName;
import java.lang.management.ManagementFactory;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;@Service
public class CustomTomcatThreadPool implements CustomTomcatThreadPoolMBean {private final static Logger logger = LoggerFactory.getLogger(CustomTomcatThreadPool.class);@AutowiredWebServerApplicationContext webServerApplicationContext;@Overridepublic String getStatus() {return buildStatus();}private String buildStatus() {logger.info("==>>: webServerApplicationContext:{} ", webServerApplicationContext);ThreadPoolExecutor executor = (ThreadPoolExecutor) ((TomcatWebServer) webServerApplicationContext.getWebServer()).getTomcat().getConnector().getProtocolHandler().getExecutor();logger.info("==>>: 這行日志如果沒有輸出,就是上一行代碼報錯了。雖然報錯,但由于當前線程[RMP TCP Connection(x)-ip]的特殊性,并不會在控制臺打印堆棧");Map<String, String> returnMap = new LinkedHashMap<>();returnMap.put("核心線程數(corePoolSize)", String.valueOf(executor.getCorePoolSize()));returnMap.put("最大線程數(maximumPoolSize)", String.valueOf(executor.getMaximumPoolSize()));returnMap.put("活躍線程數(activeCount)", String.valueOf(executor.getActiveCount()));returnMap.put("池中當前線程數(poolSize)", String.valueOf(executor.getPoolSize()));returnMap.put("歷史最大線程數(largestPoolSize)", String.valueOf(executor.getLargestPoolSize()));returnMap.put("工作隊列任務數量(workQueue.size)", String.valueOf(executor.getQueue().size()));returnMap.put("線程允許空閑時間/s(keepAliveTime)", String.valueOf(executor.getKeepAliveTime(TimeUnit.SECONDS)));returnMap.put("核心線程數是否允許被回收(allowCoreThreadTimeOut)", String.valueOf(executor.allowsCoreThreadTimeOut()));returnMap.put("提交任務總數(submittedCount)", String.valueOf(executor.getSubmittedCount()));returnMap.put("歷史執行任務的總數(近似值)(taskCount)", String.valueOf(executor.getTaskCount()));returnMap.put("歷史完成任務的總數(近似值)(completedTaskCount)", String.valueOf(executor.getCompletedTaskCount()));returnMap.put("拒絕策略(ejectedExecutionHandler.class)", executor.getRejectedExecutionHandler().getClass().getCanonicalName());String res = JSON.toJSONString(returnMap);logger.info("==>>: {}", res);return res;}@PostConstructpublic void post() {MBeanServer server = ManagementFactory.getPlatformMBeanServer();ObjectName objectName = null;try {objectName = new ObjectName("qww:type=CustomTomcatThreadPool");} catch (MalformedObjectNameException e) {e.printStackTrace();}try {// 這里的key 必須使用Spring 中注冊的對象,也就是當前對象server.registerMBean(this, objectName);} catch (InstanceAlreadyExistsException | MBeanRegistrationException | NotCompliantMBeanException e) {e.printStackTrace();}}}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/43698.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/43698.shtml
英文地址,請注明出處:http://en.pswp.cn/news/43698.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

三本書與三場發布會,和鯨社區重新定義編程類書籍從閱讀到實踐新體驗

當 AI 開發者社區配備 AI 基礎設施開發平臺工具時&#xff0c;它還能做什么&#xff1f; 答案是&#xff1a;過去半年&#xff0c;和鯨社區憑借在氣象、醫學、社科等垂直領域的長期積累以及多方伙伴的支持&#xff0c;聯合舉辦了三場新書發布會——從 Python 到 R 語言 、從氣…

Midjourney Prompt 提示詞速查表 v5.2

Midjourney 最新的版本更新正不斷推出令人興奮的新功能。這雖然不斷擴展了我們的AI繪圖工具箱&#xff0c;但有時也會讓我們難以掌握所有實際可以使用的功能和參數。 針對此問題, 小編整理了 "Midjourney Prompt 提示詞速查表"&#xff0c;這是一個非常方便的 Midjo…

Java“牽手“拼多多商品詳情頁面數據獲取方法,拼多多API實現批量商品數據抓取示例

拼多多商城是一個網上購物平臺&#xff0c;售賣各類商品&#xff0c;包括服裝、鞋類、家居用品、美妝產品、電子產品等。要獲取拼多多商品詳情數據&#xff0c;您可以通過開放平臺的接口或者直接訪問拼多多商城的網頁來獲取商品詳情信息。以下是兩種常用方法的介紹&#xff1a;…

Linux:shell腳本數組和腳本免交互

目錄 一、shell數組的定義 二、定義數組的方式 &#xff08;1&#xff09;數組名(value1 value2 value3 value4 ...) &#xff08;2&#xff09;獲取數組的長度 &#xff08;3&#xff09;獲取數組下標對應的值 &#xff08;4&#xff09;數組的遍歷 &#xff08;5&#x…

qsort函數詳解

大家好&#xff0c;我是蘇貝&#xff0c;本篇博客帶大家了解qsort函數&#xff0c;如果你覺得我寫的不錯的話&#xff0c;可以給我一個贊&#x1f44d;嗎&#xff0c;感謝?? 文章目錄 一. qsort函數參數詳解1.數組首元素地址base2.數組的元素個數num和元素所占內存空間大小w…

ThreeJS——在3D地球上標記中國地圖板塊

Threejs3D地球標記中國地圖位置 先看效果 地球預覽視頻效果 用到的庫 TweenJS (動畫庫)用來做相機轉場的動畫Jquery(這里只用到一個 each 循環方法&#xff0c;可以使用 js 去寫)ThreeJS (3D 地球制作)100000.json(全國城市經緯度)d3.v6.js用來設置平面轉3D效果(本來考慮做成…

深入解析IDS/IPS與SSL/TLS和網絡安全

目錄 防火墻 IDS IPS DMZ VPN VPS SSL/TLS 動態IP 靜態IP 防火墻 防火墻是一種網絡安全設備&#xff0c;用于監控和控制網絡流量&#xff0c;保護網絡免受未經授權的訪問、惡意攻擊和威脅。防火墻可以基于規則進行數據包過濾&#xff0c;允許或阻止特定類型的流量通過…

Lead-Lag控制器形式

對于Lead-Lag&#xff08;超前—滯后&#xff09;&#xff0c;有的地方叫做控制器 Controller&#xff0c;有的地方叫補償器 Compensator&#xff0c;有的地方叫濾波器 Filter&#xff0c;都是一個東西。 Lead-Lag也有幾種不同的形式&#xff0c;一種是 G c ( s ) 1 a T s 1…

QT設置widget背景圖片

首先說方法&#xff0c;在給widget或者frame或者其他任何類型的控件添加背景圖時&#xff0c;在樣式表中加入如下代碼&#xff0c;指定某個控件&#xff0c;設置其背景。 類名 # 控件名 { 填充方式&#xff1a;圖片路徑 } 例如&#xff1a; QWidget#Widget {border-image: url…

無涯教程-TensorFlow - 優化器

Optimizers是擴展類&#xff0c;其中包括用于訓練特定模型的附加信息&#xff0c;Optimizers類使用給定的參數初始化&#xff0c;用于提高速度和性能&#xff0c;以訓練特定模型。 TensorFlow的基本Optimizers是- tf.train.Optimizer 此類在tensorflow/python/training/opti…

C語言:深度學習知識儲備

目錄 數據類型 每種類型的大小是多少呢&#xff1f; 變量 變量的命名&#xff1a; 變量的分類&#xff1a; 變量的作用域和生命周期 作用域&#xff1a; 生命周期&#xff1a; 常量 字符串轉義字符注釋 字符串&#xff1a; 轉義字符 操作符&#xff1a; 算術操作符…

圖神經網絡 day2 圖的分類

圖神經網絡基礎算法 1 GCN2 GraphSAGE2.1 采樣&#xff1a;采樣固定長度的鄰居2.2 聚合2.3 GraphSAGE_minibatch2.4 GraphSAGE_embedding 3 GAT4. 圖網絡的分類4.1 遞歸圖神經網絡 RGNN4.2 圖卷積神經網絡GCN4.3 圖注意力網絡 GAT4.4 圖自動編碼 GAE4.5 圖時空網絡 GSTN4.6 圖生…

typeScript 接口和類

工具&#xff1a; PlayGround 接口 接口用來定義對象的結構和類型&#xff0c;描述對象應該具有哪些屬性和方法。 它僅用于聲明&#xff0c;而不是實現&#xff1b; 這對于編寫可重用的代碼非常有用。它可用于&#xff1a; 關鍵字是interface&#xff0c; 注意&#xff1a;它…

OSPF在廣播類型的網絡拓撲中DR和BDR的選舉

指定路由器&#xff08;DR&#xff09;&#xff1a; 一個網段上的其他路由器都和指定路由器&#xff08;DR&#xff09;構成鄰接關系&#xff0c;而不是它們互相之間構成鄰接關系。 備份指定路由器&#xff08;BDR&#xff09;&#xff1a; 當DR出現問題&#xff0c;由BDR接…

redis事務對比Lua腳本區別是什么

redis官方對于lua腳本的解釋&#xff1a;Redis使用同一個Lua解釋器來執行所有命令&#xff0c;同時&#xff0c;Redis保證以一種原子性的方式來執行腳本&#xff1a;當lua腳本在執行的時候&#xff0c;不會有其他腳本和命令同時執行&#xff0c;這種語義類似于 MULTI/EXEC。從別…

中間件: Kafka安裝部署

單機部署 下載二進制包 cd /opt/soft/archive wget http://archive.apache.org/dist/kafka/3.2.0/kafka_2.12-3.2.0.tgz tar -zxf kafka_2.12-3.2.0.tgz -C ../ cd ../kafka_2.12-3.2.0修改配置 vim config/server.propertiesadvertised.listenersPLAINTEXT://39.105.11.50:…

C++系列-函數重載

C系列-函數重載 函數重載函數重載的條件函數重載注意事項引用作為重載函數重載遇到默認參數 函數重載 函數名可以相同&#xff0c; 提高復用性 函數重載的條件 同一個作用域下函數名相同函數參數不同 – 參數個數不同 – 參數順序不同 – 參數類型不同不可以使用返回值作為重…

UI和API自動化測試的失敗原因

一、UI自動化失敗原因&#xff1a; 界面發生了變化&#xff0c;但是腳本沒有更新腳本中的等待時間太短了&#xff0c;導致元素還沒出來就被判定為失敗了網絡因素&#xff0c;網絡如果太慢的話&#xff0c;界面元素的顯示就會滯后執行的時候突然彈出一個窗口影響了元素的定位Ag…

Python web實戰之Django 的跨站點請求偽造(CSRF)保護詳解

關鍵詞&#xff1a;Python、Web、Django、跨站請求偽造、CSRF 大家好&#xff0c;今天我將分享web關于安全的話題&#xff1a;Django 的跨站點請求偽造&#xff08;CSRF&#xff09;保護&#xff0c;介紹 CSRF 的概念、原理和保護方法. 1. CSRF 是什么&#xff1f; CSRF&#…

微服務與Nacos概述-6

RBAC 模型 RBAC 基于角色的訪問控制是實施面向企業安全策略的一種有效的訪問控制方式。 基本思想是&#xff0c;對系統操作的各種權限不是直接授予具體的用戶&#xff0c;而是在用戶集合與權限集合之間建立一個角色集合。每一種角色對應一組相應的權限。一旦用戶被分配了適當…