1. 程式人生 > >btrace安裝,配置,使用,常見異常,解除安全限制

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組建的雲環