查看java線程數(shù)量及線程名并進行校驗

需求

  • 一個后臺Java程序啟動時尺栖,可以在配置文件中配置線程數(shù)量。需要獲取線程數(shù)量和線程名進行校驗。

思路

  1. 讀取配置文件废境,獲得配置的線程數(shù)量。
  2. 獲取該java程序的進程pid
  3. 通過jstack 獲取該進程的線程詳情并重定向至文件
  4. python 讀取該文件并進行分析

實現(xiàn)

該java程序會將pid寫入一個文件中筒繁,所以直接讀取該文件獲得pid即可噩凹。此處將上述的2、3使用shell腳本實現(xiàn)毡咏。

#! /bin/bash
pid=`cat tpid`
jstack $pid >> ./$pid.txt

python 讀取該文件并進行分析

# -*- coding: utf-8 -*-
import re
import json
import subprocess
import sys
reload(sys)
sys.setdefaultencoding('utf8')

def get_real_threads_name_list(jstack_file):         #從jstack log中獲取實際的線程數(shù)及線程名
    log_file = open(jstack_file, 'r')
    pattern = re.compile('"(.*)"')
    real_threads_name_list = pattern.findall(log_file.read())
    log_file.close()
    print json.dumps(real_threads_name_list, encoding='utf-8', ensure_ascii=False)
    return real_threads_name_list

def is_chinese(param_list):       #判斷是否中文
    real_threads_num = 0
    for i in param_list:
        if u'\u4e00' <= i <= u'\u9fff':
            real_threads_num += 1
    return real_threads_num


def get_application_threads_num(file_path):      #從配置文件讀取配置的線程數(shù)量
    application_yaml = open(file_path)
    application_threads_num = 0
    application = yaml.load(application_yaml)
    if application['frms.etl.pay']['enable']:
        application_threads_num += application['frms.etl.pay']['threadSize']
    if application['frms.pay.auditobj']['enable']:
        application_threads_num += application['frms.pay.auditobj']['threadsize']
    if application['frms.pay.ds']['enable']:
        application_threads_num += application['frms.pay.ds']['threadsize']
    if application['frms.pay']['streamcube.publish.enable']:
        application_threads_num += application['frms.pay']['dsobj']['threadsize']
    if application['frms']['pay.etl']['cloud.call']:
        application_threads_num += application['frms']['etl.data.service']['threadSize']
    application_threads_num += application['frms.etl.scheduled.threadSize']
    application_yaml.close()
    return application_threads_num


def compare(a, b):     #比較
    if a == b:
        print 'ok'
    else:
        print 'not ok'


if __name__ == '__main__':
    subprocess.call('pid_log.sh', shell=True)         #調(diào)用shell腳本
    real_threads_nums = is_chinese(get_real_threads_name_list('H:\\scripts\\jstack19666.txt'))
    application_threads_nums = get_application_threads_num(
        'application(1).yml')
    compare(real_threads_nums, application_threads_nums)

新需求
通過jstack遠程連接服務器
還沒實現(xiàn)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末驮宴,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子呕缭,更是在濱河造成了極大的恐慌堵泽,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件恢总,死亡現(xiàn)場離奇詭異落恼,居然都是意外死亡,警方通過查閱死者的電腦和手機离熏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進店門佳谦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人滋戳,你說我怎么就攤上這事钻蔑∩犊蹋” “怎么了?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵咪笑,是天一觀的道長可帽。 經(jīng)常有香客問我,道長窗怒,這世上最難降的妖魔是什么映跟? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮扬虚,結(jié)果婚禮上努隙,老公的妹妹穿的比我還像新娘。我一直安慰自己辜昵,他們只是感情好荸镊,可當我...
    茶點故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著堪置,像睡著了一般躬存。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上舀锨,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天岭洲,我揣著相機與錄音,去河邊找鬼坎匿。 笑死钦椭,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的碑诉。 我是一名探鬼主播,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼侥锦,長吁一口氣:“原來是場噩夢啊……” “哼进栽!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起恭垦,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤快毛,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后番挺,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體唠帝,經(jīng)...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年玄柏,在試婚紗的時候發(fā)現(xiàn)自己被綠了襟衰。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,764評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡粪摘,死狀恐怖瀑晒,靈堂內(nèi)的尸體忽然破棺而出绍坝,到底是詐尸還是另有隱情,我是刑警寧澤苔悦,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布轩褐,位于F島的核電站,受9級特大地震影響玖详,放射性物質(zhì)發(fā)生泄漏把介。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一蟋座、第九天 我趴在偏房一處隱蔽的房頂上張望拗踢。 院中可真熱鬧,春花似錦蜈七、人聲如沸秒拔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽砂缩。三九已至,卻和暖如春三娩,著一層夾襖步出監(jiān)牢的瞬間庵芭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工雀监, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留双吆,地道東北人。 一個月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓会前,卻偏偏與公主長得像好乐,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子瓦宜,可洞房花燭夜當晚...
    茶點故事閱讀 44,665評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理蔚万,服務發(fā)現(xiàn),斷路器临庇,智...
    卡卡羅2017閱讀 134,654評論 18 139
  • 1. Java基礎部分 基礎部分的順序:基本語法反璃,類相關(guān)的語法,內(nèi)部類的語法假夺,繼承相關(guān)的語法淮蜈,異常的語法,線程的語...
    子非魚_t_閱讀 31,625評論 18 399
  • 下面是我自己收集整理的Java線程相關(guān)的面試題已卷,可以用它來好好準備面試梧田。 參考文檔:-《Java核心技術(shù) 卷一》-...
    阿呆變Geek閱讀 14,827評論 14 507
  • 一、多線程 說明下線程的狀態(tài) java中的線程一共有 5 種狀態(tài)。 NEW:這種情況指的是柿扣,通過 New 關(guān)鍵字創(chuàng)...
    Java旅行者閱讀 4,676評論 0 44
  • 在minikube v0.7.1版本中使用`minkube dashboard`命令會遇到以下的錯誤: 通過`ku...
    我私人的kernel閱讀 14,864評論 1 49