jvm sandbox學習 實踐

2021-10-09 11:26:40 字數 1677 閱讀 8478

一、簡介

0、官網  、原理

1、jvm-sandbox(沙箱)實現了一種在不重啟、不侵入目標jvm應用的執行期aop解決方案。

2、動態增強類你所指定的類,獲取你想要的引數和行資訊甚至改變方法執行

3、動態可插拔容器框架

注:可插拔兩層含義:

a、jvm 沙箱本身是可以被插拔的,可被動態地掛載到指定 jvm 程序上和可以被動態地解除安裝;

b、jvm 沙箱內部的模組是可以被插拔的,在沙箱啟動期間,被載入的模組可以被動態地啟用和解除安裝

(一)應用場景

1、線上故障定位

2、線上系統流控

3、線上故障模擬

4、方法請求錄製和結果回放

5、動態日誌列印

6、安全資訊監測和脫敏

二、安裝三、沙箱配置

sandbox-module-starter

1.2.0

3、同乙個jar包所宣告的所有模組共享同乙個modulejarclassloader

4、模組一共有四種狀態

a、載入:模組被沙箱正確載入,沙箱將會允許模組進行命令相應、**插樁等動作

b、解除安裝:沙箱不會再看到該模組,之前給該模組分配的所有資源都將會被**,包括模組已經偵聽事件的類都將會被移除掉監聽插樁,乾淨利落不留後遺症

c、啟用:模組載入成功後預設是凍結狀態,需要**主動進行啟用。模組只有在啟用狀態下才能監聽到沙箱事件

d、凍結:模組進入到凍結狀態之後,之前偵聽的所有沙箱事件都將被遮蔽。需要注意的是,凍結的模組不會退回事件偵聽的**插樁,只有delete()、wathcing()或者模組被解除安裝的時候插樁**才會被清理。

(三)配置檔案解釋

1、./cfg/sandbox.properties。如圖

配置檔案只會在沙箱第一次啟動的時候載入,重新整理(-f)、**強制重新整理(-f)和重置(-r)都不會讓配置檔案重新生效。如果希望配置檔案重新生效,需要關閉(-s)**容器,重新再次載入。

四、命令說明

10、-d:模組自定義命令

掛載到對應程序:./sandbox.sh -p vmid -d 'my-sandbox-module/addlog' 【my-sandbox-module/addlog】

@information(id = "my-sandbox-module")// 模組名,在指定掛載程序後通過-d指定模組,配合@command註解來唯一確定方法【標記在類上】

@command("addlog")// 模組命令名【標記在方法上】

通過指令檢視是否掛載成功:./sandbox.sh -p vmid -l

五、sand-box實戰(記錄請求日誌)

b、swagger:

c、sandbox-log-module:/root/.sandbox-module/sunxj-sandbox-1.0-snapshot-jar-with-dependencies.jar

2 jvm sandbox之結構和狀態

參考 結構說明 sandbox bin sandbox.sh 沙箱的客戶端指令碼,用於啟動 管理沙箱 sandbox cfg sandbox cfg version 存放沙箱容器的版本號,當你不確定當前容器的版本的時候可以通過這個檔案進行核對 sandbox cfg sandbox.properti...

深度學習實踐

選擇合適的損失函式 mini batch 選擇不同的啟用函式 改變學習速度 momentum early stopping 正則化 dropout 改變網路架構 選擇合適的損失函式 mini batch當資料集很大時,訓練演算法是非常慢的,和 batch 梯度下降相比,使用 mini batch 梯...

Restful API 學習 實踐

1.應該場景 restful 是目前最流行的 api 設計規範 風格,不是強制要求 用於 web 資料介面的設計。2.學習 操作 restful api 大原則容易把握,但是細節不容易做對。本文總結 restful 的設計細節,介紹如何設計出易於理解和使用的 api。restful api 設計指南...