btrace安裝,配置,使用,常見異常,解除安全限制
一、下載btrace
可以下載它的原始碼包,它的原始碼包是一個gradle專案
如果只想使用它排查問題,也可以直接下載它的bin包,下載地址
可以直接通過這個連結下載1.3.8版本的btrace
二、配置環境變數
解壓完成後需要配置環境變數BTRACE_HOME
export BTRACE_HOME=/home/work/btrace/
export PATH=$PATH:$BTRACE_HOME/bin
三、編寫btrace指令碼
比如我們監控spring-data-redis出現異常的時候,列印入參和異常堆疊資訊:
package com; import com.sun.btrace.AnyType; import com.sun.btrace.annotations.*; import static com.sun.btrace.BTraceUtils.*; import com.alibaba.fastjson.JSON; @BTrace(unsafe=true) public class Trace { @OnMethod(clazz = "org.springframework.data.redis.core.DefaultHashOperations", method = "putAll", location
[email protected](Kind.ERROR)) public static void putAll(Throwable exception,AnyType[] args){ println("\n##################################@#####DefaultHashOperations"); println(JSON.toJSONString(args)); println(JSON.toJSONString(exception)); println("\[email protected]@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"); } @OnMethod(clazz = "org.springframework.data.redis.core.DefaultSetOperations", method = "add", location[email protected](Kind.ERROR)) public static void add(Throwable exception,AnyType[] args){ println("\n##################################@#####DefaultSetOperations"); println(JSON.toJSONString(args)); println(JSON.toJSONString(exception)); println("\[email protected]@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"); } }
四、執行指令碼:
./btrace -cp /home/work/btrace/bin/fastjson-1.2.29.jar -p 2021 5941 Trace.java
說明:
1. -cp /home/work/btrace/bin/fastjson-1.2.29.jar 指定classpath,因為引入了fastjson對引數序列化成json字串後輸出,所以這裡加入了fastjson的jar包;
2. -p 2021 btrace預設埠為2020,這裡更改了預設埠;
3. 5941是要追蹤的jvm程序的程序id;
4. Trace.java 是第三步編寫的java指令碼的檔名;
異常說明
1. Port 2020 unavailable.
btrace會在remote JVM agent開啟一個遠端socketserver,預設埠是2020,正好如果一臺臺伺服器有多個JVM例項需要使用btrace,當在第一個JVM上執行btrace命令後,再從其他jvm例項上執行btrace就會報錯。這時候就可以使用-p引數指定埠;
2. method calls are not allowed - only calls to BTraceUtils are allowed
原因是btrace存在安全限制,不允許呼叫com.sun.btrace.BTraceUtils這個類中提供的方法以外的方法。但是我的指令碼中使用的fastjson來講物件轉換為json字串打印出來,所以需要解除安全限制;
3. Unable to open socket file: target process not responding or HotSpot VM not loaded
執行btrace的使用者必須和啟動jvm程序的使用者是同一個
正確的姿勢解除安全限制
網上提供了很多種方解除安全限制的方式都不靠譜,例如:
1. 使用 -u ;
2. 給btrace設定jvm引數 -Dcom.sun.btrace.unsafe=true
如果,按上面兩種方式是無法解除安全限制的,正確的解除安全限制的姿勢是給btrace的jvm啟動指令碼添加了
-Dcom.sun.btrace.unsafe=true引數後,還需要在java指令碼類的@Btrace註解上加上unsafe=true:
@BTrace(unsafe=true)
相關推薦
btrace安裝,配置,使用,常見異常,解除安全限制
一、下載btrace 可以下載它的原始碼包,它的原始碼包是一個gradle專案 如果只想使用它排查問題,也可以直接下載它的bin包,下載地址 可以直接通過這個連結下載1.3.8版本的btrace 二、配置環境變數 解壓完成後需要配置環境變數BTRACE_
12.Nginx介紹,安裝,配置默認虛擬主機,重定向
Nginx介紹 Nginx安裝 配置默認虛擬主機 [toc] 12.5 Nginx介紹 官網:nginx.org 因為nginx處理靜態文件的能力要比apache好很多,所以很多企業在建站的時候一般都是用java寫的,然後會選擇tomcat,但是tomcat處理靜態文件的能力不是太好就會疊加選
安裝minikube 0.25,複雜的網路結構,配置中容易出問題,vmware虛擬機器 centos7伺服器
vmware虛擬機器 centos7伺服器 判斷開啟虛擬化 egrep '(vmx|svm)' /proc/cpuinfo 關閉防火牆 systemctl stop firewalld && sudo systemctl disable firewalld
Deepin 安裝Geany後,配置Python3 執行Python檔案,終端介面不顯示問題
最近在看Python書的時候,推薦了一個IDE Geany,發現在deepin系統上執行不顯示執行結果。 後來查看了https://bbs.deepin.org/forum.php?mod=viewthread&tid=135435&page=1#pid305651 發現是終端配置有問題,
Mac 安裝Maven,配置Maven和Java環境,以及遇見問題解析
一、確定java環境是否搭建完成,安裝的jdk的版本號是多少 安裝Maven的版本不同對JDK的版本要求也不同 確認java環境以及版本的命令: $ java -version $ javac -version 二、下載M
OpenVPN安裝、配置及使用詳解,證書驗證、使用者密碼驗證、手機連線配置。
搞了一天安裝過程中不是很順利,部分文章說明的不是太詳細,因此結合多個文章撰寫的此文,希望能幫上使用OpenVpn的兄弟們。一、OpenVPN OpenVPN是一個用於建立虛擬專用網路(Virtual Private Network)加密通道的免費開源軟體。使用Op
可執行jar包,配置檔案找不到,看這裡
獲取部署的路徑 String ProjectPath=XXX.class.getProtectionDomain().getCodeSource().getLocation().getPath(); 這個比其他的都好用 public static String getC
ubuntu 18.04.1,配置opencv3.4.3環境,並用Qt測試
之前在windows裝過opencv,編譯環境也是Qt,這次想說在ubuntu下也裝個,但總是遇到各種皮皮蝦問題。這裡我借鑑下一位網友的安裝教程:https://blog.csdn.net/jindunwan7388/article/details/80397700#comm
用控制元件(CMSComm)讀串列埠程式碼(高效率,不同於網上常見的,決沒有抄襲)!
讀串列埠的程式碼在網上是鋪天蓋地,但他們幾乎完全是一樣的,第一個人寫出來的才是英雄,其它的不是。這段程式碼類似於下面: VARIANT variant_inp; COleSafeArray safearray_inp; LONG len,k; BYTE rxdata[204
SpringMVC,啟動不報錯,配置看起來都正確,但接不到值
今天自己建立一個SpringMVC的WEB工程,配置看起來都正確,但接不到值,後來一步步對比原來的工程,發現SpringMVC.xml裡缺了這個,原來的工程是用它來上傳檔案的,以為是不必要的,所以沒加,就出現了接不到POST的值了。 <bean id="multipa
Android Studio 同一專案,配置不同的URL環境,不同的AppName,多版本共存同一手機
需求:一個專案,不同的環境URL,要有不同的AppName,一個手機上同時能安裝多個版本注意:因為包名 不同,所以一些第三方註冊也就失效了,比如:集成了友盟推送,其他版本修改了包名,也就收不到推送了,可以在友盟官網新建多個應用,不同包名,配置不同的AppKey;基於前輩的資料
關於Tomcat啟動專案時,控制檯丟擲各種異常,誤以為專案錯誤
1.當在eclipse啟動tomcat,初始化專案時,控制檯會列印啟動日誌:當出現 九月 19, 2017 3:07:35 下午 org.springframework.web.
Tomcat修改埠號,配置外部應用訪問路徑,預設web應用
修改埠號 * 修改埠號,%CATALANA_HOME%\conf\server.xml,修改<Connector port="8080">,把8080修改了即可。 * http協議預設埠為80,也就是說http://localhost,等同與http:
高性能HTTP加速器Varnish安裝與配置(包含常見錯誤)
人員 準備 版本 狀態碼 port pop 沒有 gis for Varnish是一款高性能的開源HTTP加速器。挪威最大的在線報紙Verdens Gang使用3臺Varnish取代了原來的12臺Squid,性能竟然比曾經更好。Varnish 的作者Po
maven 安裝配置環境變數不成功,命令報不是內部或外部命令異常
問題: maven配置,新建MAVEN_HOME新增maven路徑,將%MAVEN_HOME%\bin加入path中,然而在dos檢視時報'不是內部或外部命令異常',環境變數配置不成功 解決方法:刪掉MAVEN_HOME,編輯環境變數path,將%MAVEN_HOME%\bin,改為E:\Jav
win10 關於oracle和PLSQL Developer的安裝、配置,以及常見問題解決
WIN10 關於oracle和PLSQL Developer的安裝、配置,以及常見問題解決辦法 我是比較喜歡去官網下載軟體,主要是比較乾淨安全,沒有捆綁軟體。plsql是支援32位oracle的,所以oracle客戶端我裝的32位,據說64位的也是可以用的,但是要配置一些檔案(我圖方
Maven+SpringMVC+Eclipse軟體安裝配置,Maven報外掛異常,Eclipse總是卡死的解決方法,匯入一個maven工程後 一直顯示importing maven project
1.Maven+SpringMVC+Eclipse軟體安裝配置,Maven報外掛錯誤,Eclipse總是卡死的解決辦法,匯入一個maven工程後 一直顯示importing maven project
centos 7搭建vsftp安裝,配置,解除安裝,常見錯誤
系統版本:centos 7 ftp軟體:vsftp 1.檢視計算機是否安裝了vsftp [[email protected] ~]#rpm -qa | grep vsftpd 如果出現vsftpd-2.0.5-21.el5,說明已經安裝 vsftp 2.安裝
ADB 驅動以及工具包下載安裝,常見異常問題解決(親自測試有效)1、黃色感嘆號2、offline 3、unauthorized
作業系統 win32位首先下載驅動包和工具包(做個任務賺下C幣,很快的)http://download.csdn.net/download/u012611644/10253370解壓後兩個檔案一、安裝adbsetup.exe,一路按Y。但是插入手機後 顯示一個黃色的感嘆號。這
docker:virtualbox 安裝CoreOS系統,配置registry-mirror
usr 事情 並不是 load data 輕量 mac 底層 cdn “CoreOS是一款面向新智雲(www.enncloud.cn)的輕量級OS。它以Linux系統為基礎,因建設數據中心的需要從Linux底層進行了內核裁減。一系列的機制和工具保證了CoreOS組建的雲環