arthas命令redefine實現Java熱更新

Arthas非常重要的命令redefine,主要作用是加載外部的.class文件,用來替換JVM已經加載的類,總結起來就是實現了Java的熱更新。
redefine在一下幾種情況中會失敗:1、增加了field;2、增加了method;3、替換正在運行的方法。
前兩個比較好理解,第三個意思就是這個方法必須結束之后才會被替換,如果有個方法開始運行之后就不會跳出,那么這個方法所在的類是無法被替換的,類似無限循環的方法。

場景需求
舉個例子,在線上代碼某個class的方法添加日志輸出,修改方法返回結果,但是,又不想直接修改class

只需操作如下:
1.上傳修改后的class文件到服務器任意路徑,比如:/usr/local/arthas/file/ParserFileService.class
2.下載 Arthas(阿爾薩斯)
3.根據java程序 pid 運行arthas,# ./as.sh 4334
4.通過redefine加載修改后的class文件,$ redefine /data/web/ParserFileService.class
5.驗證效果,結束
6.這個方式只是修改運行時內存,class文件并沒有改變,服務重啟就失效了,如需永久生效需替換原文件

如下效果是添加簡單的腳本,自動依據pid運行arthas,省去每次專門查看pid的過程

在這里插入圖片描述

腳本如下:
腳本放置與需上傳class文件同級目錄即可。

#!/bin/bash
PID=`ps aux|grep [p]roject|awk '{print $2}'`if [ $? -eq 0 ];
thenecho PID is $PID.cd /usr/local/arthas/sh as.sh $PID
elseecho PID not exist.
fi


注:grep [p]roject等同于 grep -v project;project是項目名
————————————————
版權聲明:本文為CSDN博主「IT_狂奔者」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/chj_1224365967/article/details/107617415

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

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

相關文章

安裝 ZendServer-CE 可能遇到的問題

安裝后,打開http://localhost:10081/ZendServer 出現如下頁面. Internal Server Error The server encountered an internal error or misconfiguration and was unable to complete your request. Please contact the server administrator, adminexample.com and inform them…

Elk7.2 Docker

正如官方所說的那樣 https://www.elastic.co/guide/en/elasticsearch/reference/current/vm-max-map-count.html,Elasticsearch默認使用mmapfs目錄來存儲索引。操作系統默認的mmap計數太低可能導致內存不足,我們可以使用下面這條命令來增加內存 為了防止…

我了解到的面試的一些小內幕!附面試題答案

背景 首先我是個菜雞,工資也低的一筆。 剛畢業時候在一家國企上班干 app 開發,干了快兩年的時候,跳槽到了一家偽大廠干安全。投了不少簡歷都沒有回音,只有這加偽大廠要我就來了。當時說好了會接觸一些底層的東西,然而…

學習單調隊列小結

因為一直在聽身邊的人說什么單調隊列/斜率優化dp/背包,(ps:我也不清楚這樣稱呼對不對,因為我真心是沒見過這些東西)我都覺得那是神一樣的東西。終于抽出時間學了一下。 昨天在朋友一本書里面看到一句話,這里先跟大家分享一下: 沒有…

@Async join

直接貼代碼 自定義線程池 package com.xh.lawsuit.rest.modular.example; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecu…

我們究竟還要學習哪些Android知識?完整版開放下載

前言 移動研發火熱不停,越來越多人開始學習 android 開發。但很多人感覺入門容易成長很難,對未來比較迷茫,不知道自己技能該怎么提升,到達下一階段需要補充哪些內容。市面上也多是談論知識圖譜,缺少體系和成長節奏感&a…

ELK7.8.1的Docker搭建過程

在linux下首先在目錄準備文件 首先說明,我的電腦宿主機的IP是192.168.1.5 為es準備文件 mkdir -p /opt/elk7/es cd /opt/elk7/es #創建對應的文件夾 數據 / 日志 / 配置 mkdir conf data logs #授權 chmod 777 -R conf data logs然后進入到/opt/elk7/es/conf下 …

如何使用git創建項目,創建分支

git config -global user.name "Your name" git config -global user.email "youexample.com" 建立一個存放工程的文件夾 git init命令用于初始化當前所在目錄的這個項目 會創建一個隱藏文件 .git 創建 main.c 文件 創建 .gitignore文件,忽略…

我們究竟還要學習哪些Android知識?附贈課程+題庫

2021新的一年,開啟新的征程,回顧2020,真是太“南”了。 從年初各大廠裁員,竟然成為一件理所應當的事情,到四月份 GitHub 上“996.ICU” 引起了大家的共鳴。即使我們兢兢業業“996”,但依舊難以抵御 35 歲時…

WINDOWS上KAFKA運行環境安裝

WINDOWS上KAFKA運行環境安裝 1. 安裝JDK 1.1 安裝文件:http://www.oracle.com/technetwork/java/javase/downloads/index.html 下載JDK 1.2 安裝完成后需要添加以下的環境變量(右鍵點擊“我的電腦” -> "高級系統設置" -> "環境變…

架構師成長之路-個人學習經驗分享(公司研發峰會演講ppt)

前天在公司分享了一些學習經驗,園子中感興趣可以看看。建議大家使用pptPlex來看這個片子。 首先從我在成長中不同階段的工作和體會來談不同階段的學習內容談起,為了做好這些必修課,我會對知識+實踐+思考+心態&#xff…

我憑什么拿到了阿里、騰訊、今日頭條3家大廠offer?這原因我服了

前言 從畢業到現在面試也就那么幾家公司,單前幾次都比較順利,在面到第三家時都給到了我offer!前面兩次找工作,沒考慮到以后需要什么,自己的對未來的規劃是什么,只要有份工作,工資符合自己的要求…

kafka logstash elk

前言 企業開發中,一個應用會有多個測試環境,于是會有一個專門的服務器做日志收集,那就需要保存日志和應用隔離,這里就牽涉到異步存寫日志的問題,異步消息隊列選取kafka,高性能,日志消息消費我們…

模板概述

模板,按建筑學的說法是:施工時澆筑混凝土用的成組模型板;而模板之詞,恐怕可釋之為模型之板,顧名思義,模板為一套規定好了規范準則的樣板。既然為樣板,自然是可被多方使用;而準則既已…

我憑什么拿到了阿里、騰訊、今日頭條3家大廠offer?通用流行框架大全

前言 從畢業到現在面試也就那么幾家公司,單前幾次都比較順利,在面到第三家時都給到了我offer!前面兩次找工作,沒考慮到以后需要什么,自己的對未來的規劃是什么,只要有份工作,工資符合自己的要求…

解決讀寫分離過期讀的幾個方案

mysql讀寫分離的坑 讀寫分離的主要目標是分攤主庫的壓力,由客戶端選擇后端數據庫進行查詢。還有種架構就是在MYSQL和客戶端之間有一個中間代理層proxy,客戶端之連接proxy,由proxy根據請求類型和上下文決定請求的分發路由。 客戶端直連方案&am…

Feign接口 多線程問題

Spring Cloud Feign傳輸Header,并保證多線程情況下也適用 一、現象 微服務在生產中,常遇到需要把 header 傳遞到下一子服務的情況(如服務A訪問服務B的接口,需要傳遞header),網上大多數的方案是實現 Request…

serial port 的操作

import serial①選擇設備serserial.Serial("/dev/ttyUSB0",9600,timeout0.5) #使用USB連接串行口serserial.Serial("/dev/ttyAMA0",9600,timeout0.5) #使用樹莓派的GPIO口連接串行口serserial.Serial(1,9600,timeout0.5)#winsows系統使用com1口連接串行口s…

我在華為做Android外包的真實經歷!吊打面試官系列!

導語 本部分內容是關于Android進階的一些知識總結,涉及到的知識點比較雜,不過都是面試中幾乎常問的知識點,也是加分的點。 關于這部分內容,可能需要有一些具體的項目實踐。在面試的過程中,結合具體自身實踐經歷&…

logstash windows

最新在研究elastic stack (elk) : logstash 安裝,下載最新版本的logstash: 點擊打開鏈接 解壓到磁盤根目錄下:在logstash>bin 1、目錄下創建:logstash.conf 2、輸入內容: # Sample Logstash configuration for creating …