主頁 >  其他 > 抖音 Android 性能優化系列:Java 記憶體優化篇

抖音 Android 性能優化系列:Java 記憶體優化篇

2020-12-27 11:49:17 其他

記憶體作為計算機程式運行最重要的資源之一,需要運行程序中做到合理的資源分配與回收,不合理的記憶體占用輕則使得用戶應用程式運行卡頓、ANR、黑屏,重則導致用戶應用程式發生 OOM(out of memory)崩潰,抖音作為一款用戶使用廣泛的產品,需要在各種機器資源上保持優秀的流暢性和穩定性,記憶體優化是必須要重視的環節,

本文從抖音 Java OOM 記憶體優化的治理實踐出發,嘗試給大家分享一下抖音團隊關于 Java 記憶體優化中的一些思考,包括工具建設、優化方法論,

抖音 Java OOM 背景

在未對抖音記憶體進行專項治理之前我們梳理了一下整體記憶體指標的絕對值和相對崩潰,發現占比都很高,另外,記憶體相關指標在去年春節活動時又再次激增達到歷史新高,所以整體來看記憶體問題相當嚴峻,必須要對其進行專項治理,抖音這邊通過前期歸因、工具建設以及投入一個雙月的記憶體專項治理將整體 Java OOM 優化了百分之 80,

Java OOM Top 堆疊歸因

在對抖音的 Java 記憶體優化治理之前我們先根據平臺上報的堆疊例外對當前的 OOM 進行歸因,主要分為下面幾類:

圖 1. OOM 分類

其中 pthread_create 問題占到了總比例大約在百分之 50,Java 堆記憶體超限為百分之 40 多,剩下是少量的 fd 數量超限,其中 pthread_create 和 fd 數量不足均為 native 記憶體限制導致的 Java 層崩潰,我們對這部分的記憶體問題也做了針對性優化,主要包括:

  • 執行緒收斂、監控

  • 執行緒堆疊泄漏自動修復

  • FD 泄漏監控

  • 虛擬記憶體監控、優化

  • 抖音 64 位專項

治理之后 pthread_create 問題降低到了 0.02‰以下,這方面的治理實踐會在下一篇抖音 Native 記憶體治理實踐中詳細介紹,大家敬請期待,本文重點介紹 Java 堆記憶體治理,

堆記憶體治理思路

從 Java 堆記憶體超限的分類來看,主要有兩類問題:

1. 堆記憶體單次分配過大/多次分配累計過大,

觸發這類問題的原因有資料例外導致單次記憶體分配過大超限,也有一些是 StringBuilder 拼接累計大小過大導致等等,這類問題的解決思路比較簡單,問題就在當前的堆疊,

2. 堆記憶體累積分配觸頂

這類問題的問題堆疊會比較分散,在任何記憶體分配的場景上都有可能會被觸發,那些高頻的記憶體分配節點發生的概率會更高,比如 Bitmap 分配記憶體,這類 OOM 的根本原因是記憶體累積占用過多,而當前的堆疊只是壓死駱駝的最后一根稻草,并不是問題的根本所在,所以這類問題我們需要分析整體的記憶體分配情況,從中找到不合理的記憶體使用(比如記憶體泄露、大物件、過多小物件、大圖等),

工具建設

工具思路

工欲善其事,必先利其器,從上面的記憶體治理思路看,工具需要主要解決的問題是分析整體的記憶體分配情況,發現不合理的記憶體使用(比如記憶體泄露、大物件、過多小物件等),

我們從線下和線上兩個維度來建設工具:

線下

線下工具是最先考慮的,在研發和測驗的時候能夠提前發現記憶體泄漏問題,業界的主流工具也是這個思路,比如 Android Studio Memory Profiler、LeakCanary、Memory Analyzer (MAT),

我們基于 LeakCanary 核心庫在線下設計了一套自動分析上報記憶體泄露的工具,主要流程如下:

圖 2.線下自動分析流程

抖音在運行了一段線下的記憶體泄漏工具之后,發現了線下工具的各種弊端:

  1. 檢測出來的記憶體泄漏過多,并且也沒有比較好的優先級排序,研發消費不過來,歷史問題就一直堆積,另外也很難和業務研發溝通問題解決的收益,大家針對解決線下的記憶體泄漏問題的 ROI(投入產出比)比較難對齊,

  2. 線下場景能跑到的場景有限,很難把所有用戶場景窮盡,抖音用戶基數很大,我們經常遇到一些線上的 OOM 激增問題,因為缺少線上資料而無從查起,

  3. Android 端的 HPORF 的獲取依賴原生的 Debug.dumpHporf,dump 程序會掛起主執行緒導致明顯卡頓,線下使用體驗較差,經常會有研發反饋影響測驗,

  4. LeakCanary 基于 Shark 分析引擎分析,分析速度較慢,通常在 5 分鐘以上才能分析完成,分析程序會影響行程記憶體占用,

  5. 分析結果較為單一,僅僅只能分析出 Fragment、Activity 記憶體泄露,像大物件、過多小物件問題導致的記憶體 OOM 無法分析,

線上

正是由于上述一些弊端,抖音最早的線下工具和治理流程并沒有起到什么太大作用,我們不得不重新審視一下,工具建設的重心從線下轉成了線上,線上工具的核心思路是:在發生 OOM 或者記憶體觸頂等觸發條件下,dump 記憶體的 HPROF 檔案,對 HPROF 檔案進行分析,分析出記憶體泄漏、大物件、小物件、圖片問題并按照泄露鏈路自動歸因,將大資料問題按照用戶發生次數、泄露大小、總大小等緯度排序,推進業務研發按照優先級順序來建立消費流程,為此我們研發了一套基于 HPORF 分析的線下、線上倍訓的自動化分析工具 Liko(寓意 ko 記憶體 Leak 問題),

Liko 介紹

Liko 整體架構

圖 3. Liko 架構圖

整體架構由客戶端Server 端和核心分析引擎三部分構成,

  • 客戶端

在客戶端完成 HPROF 資料采集和分析(針對端上分析模式),這里線上和線下策略不同,

線上:主要在 OOM 和記憶體觸頂時通過用戶無感知 dump 來獲取 HPROF 檔案,當 App 退出到后臺且記憶體充足的情況進行分析,為了盡量減少對 App 運行時影響,主要通過裁剪 HPROF 回傳進行分析,為減輕服務器壓力,對部分比例用戶采用端上分析作為 Backup,

線下:dump 策略配置較為激進,在 OOM、記憶體觸頂、記憶體激增、監測 Activity、Fragment 泄漏數量達到一定閾值多種場景下觸發 dump,并實時在端上分析上傳至后臺并在本地自動生成 html 報表,幫助研發提前發現可能存在的記憶體問題,

  • Server 端

Server 端根據線上回傳的大資料完成鏈路聚合、還原、分配,并根據用戶發生次數、泄露大小、總大小等緯度促進研發測消費,對于回傳分析模式則會另外進行 HPORF 分析,

  • 分析引擎

基于 MAT 分析引擎完成記憶體泄露、大物件、小物件、圖片等自動歸因,同時支持在線下自動生成 Html 報表,

Liko 流程圖

圖 4. Liko 流程圖

整體流程分為:

  1. Hprof 收集

  1. 分析時機

  1. 分析策略

Hprof 收集

收集程序我們設定了多種策略可以自由組合,主要有 OOM、記憶體觸頂、記憶體激增、監測 Activity、Fragment 泄漏數量達到一定閾值時觸發,線下線上策略配置不同,

為了解決 dump 掛起行程問題,我們采用了子行程 dump+fileObsever 的方式完成 dump 采集和監聽,

在 fork 子行程之前先 Suspend 獲取主行程中的執行緒拷貝,通過 fork 系統呼叫創建子行程讓子行程擁有父行程的拷貝,然后 fork 出的子行程中呼叫 Hprof 的 DumpHeap 函式即可完成把耗時的 dump 操作在放在子行程,由于 suspendresume 是系統函式,我們這里通過自研的 native hook 工具對 libart.so hook 獲取系統呼叫,由于寫入是在子行程完成的,我們通過 Android 提供的 fileObsever 檔案寫入進行監控獲取 dump 完成時機,

圖 5.子行程 dump 流程圖

Hprof 分析時機

為了達到分析程序對于用戶無感,我們在線上、線下配置了不同的分析時機策略,線下在 dump 分析完成后根據記憶體狀態主動觸發分析,線上當用戶下次冷啟退出應用后臺且記憶體充足的情況下觸發分析,

分析策略

分析策略我們提供了兩種,一種在 Android 客戶端分析,一種回傳至 Server 端分析,均通過 MAT 分析引擎進行分析,

端上分析
分析引擎

端上分析引擎的性能很重要,這里我們主要對比了 LeakCanary 的分析引擎 Shark 和 Haha 庫的 MAT,

圖 6. Shark VS MAT

我們在相同客戶端環境對 160M 的 HPROF 多次分析對比發現 MAT 分析速度明顯優于 Shark,另外針對 MAT 分析后仍持有統治者樹占用記憶體我們也做了主動釋放,對比性能收益后采用基于 MAT 庫的分析引擎進行分析,對記憶體泄漏參考鏈路自動歸并、大物件小物件參考鏈自動分析、大圖線下自動還原線上過濾無用鏈路,分析結果如下:

記憶體泄漏

圖 7. 記憶體泄漏鏈路

對泄漏的 Activity 的參考鏈進行了聚合分析,方便一次性解決該 Activity 的泄漏鏈釋放記憶體,

大物件

圖 8. 大物件鏈路

大物件不止分析了參考鏈路,還遞回分析了內部 top 持有物件(InRefrenrece)的 RetainedSize,

小物件

圖 9. 小物件鏈路

小物件我們對 top 的外部持有物件(OutRefrenrece)進行聚合得到占有小物件最多的鏈路,

圖片

圖 10. 圖片鏈路

圖片我們過濾了圖片庫等無效參考且對 Android 8.0 以下的大圖在線下進行了還原,

回傳分析

為了最大限度的節省用戶流量且規避隱私風險,我們通過自研 HPROF 裁剪工具 Tailor 在 dump 程序對 HPROF 進行了裁剪,

裁剪程序

圖 11. Tailor 裁剪流程

去除了無用資訊

  • 跳過 header

  • 分 tag 裁剪

    • 裁剪無用資訊:char[]; byte[]; timestamp; stack trace serial number; class serial number;

    • 壓縮資料資訊

同時對資料進行 zlib 壓縮,在 server 端資料還原,整體裁剪效果:180M--->50M---->13M

優化實踐

記憶體泄漏

除了通過后臺根據 GCROOT+ 參考鏈自動分配研發跟進解決我們常見的記憶體泄漏外,我們還對系統導致一些記憶體泄漏進行了分析和修復,

系統異步 UI 泄漏

根據上傳聚合的參考鏈我們發現在 Android 6.0 以下有一個 HandlerThread 作為 GCROOT 持有大量 Activity 導致記憶體泄漏,根據參考發現這些泄漏的 Activity 都被一個 Runnable(這里是 Runnable 是一個系統事件 SendViewStateChangedAccessibilityEvent)持有,這些 Runnable 被添加到一個 RunQueuel 中,這個佇列本身被 TheadLocal 持有,

圖 12. HandlerThread 泄露鏈路

我們從 SendViewStateChangedAccessibilityEvent 入手對原始碼進行了分析發現它在 notifyViewAccessibilityStateChangedIfNeeded 中被拋出,系統的大量 view 都會在自身的一些 UI 方法(eg: setChecked)中觸發該函式,

SendViewStateChangedAccessibilityEventrunOrPost 方法會走到我們常用的 View 的 postDelay 方法中,這個方法在當 view 還未被 attched 到根 view 的時候會加入到一個 runQueue 中,

這個 runQueue 會在主執行緒下一次的 performTraversals() 中消費掉,

如果這個 runQueue 不在主執行緒那就沒有消費的機會,

根據上面的分析發現造成這種記憶體泄漏需要滿足一些條件:

  1. view 呼叫了 postDelay 方法 (這里是 notifyViewAccessisbilityStateChangeIfNeeded 觸發)

  1. view 處于 detached 狀態

  2. 上述程序是在非主執行緒里面操作的,ThreadLocal 非 UIThread,持有的 runQueue 不會走 performTraversals 消費掉,

    抖音這邊大量使用了異步 UI 框架來優化渲染性能,框架內部由一個 HandlerThread 驅動,完全符合上述條件, 針對該問題,我們通過反射獲取非主執行緒的 ThreadLocal,在每次異步渲染完主動清理內部的 RunQueue,

    圖 13. 反射清理流程

    另外,Google 在 6.0 上也修復了 notifyViewAccessisbilityStateChangeIfNeeded 的判斷不嚴謹問題,

    記憶體泄漏兜底

    大量的記憶體泄漏,如果我們都靠推進研發解決,經常會出現生產大于消費的情況,針對這些未被消費的記憶體泄漏我們在客戶端做了監控和止損,將 onDestory 的 Activity 添加到 WeakRerefrence 中,延遲 60s 監控是否回收,未回收則主動釋放泄漏的 Activity 持有的 ViewTree 的背景圖和 ImageView 圖片,

    大物件

    主要對三種型別的大物件進行優化

    • 全域快取:針對全域快取我們按需釋放和降級了不需要的快取,盡量使用弱參考代替強參考關系,比如針對頻繁泄漏的 EventBus 我們將內部的訂閱者關系改為弱參考解決了大量的 EventBus 泄漏,

    • 系統大物件:系統大物件如 PreloadDrawable、JarFile 我們通過原始碼分析確定主動釋放并不干擾原有邏輯,在啟動完成或在記憶體觸頂時主動反射釋放,

    • 影片:用原生影片代替了記憶體占用較大的幀影片,并對 Lottie 影片泄漏做了手動釋放,

    圖 14. 大物件優化點

    小物件

    小物件優化我們集中在欄位優化、業務優化、快取優化三個緯度,不同的緯度有不同的優化策略,

    圖 15. 小物件優化思路

    通用類優化

    在抖音的業務中,視頻是最核心且通用的 Model,抖音業務層的資料存盤分散在各個業務維護了各自視頻的 Model,Model 本身由于聚合了各個業務需要的屬性很多導致單個實體記憶體占用就不低,隨著用戶使用程序實體增長記憶體占用越來越大,對 Model 本身我們可以從屬性優化和拆分這兩種思路來優化,

    • 欄位優化:針對一次性的屬性欄位,在使用完之后及時清理掉快取,比如在視頻 Model 內部存在一個 Json 物件,在反序列完成之后 Json 物件就沒有使用價值了,可以及時清理,

    • 類拆分:針對通用 Model 冗雜過多的業務屬性,嘗試對 Model 本身進行治理,將各個業務線需要用到的屬性進行梳理,將 Model 拆分成多個業務 Model 和一個通用 Model,采用組合的方式讓各個業務線最小化依賴自己的業務 Model,減少大雜燴 Model 不必要的記憶體浪費,

    業務優化

    • 按需加載:抖音這邊 IM 會全域保存會話,App 啟動時會一次性 Load 所有會話,當用戶的會話過多時相應全域占用的記憶體就會較大,為了解決該問題,會話串列分兩次加載,首次只加載一定數量到記憶體,需要時再加載全部,

    • 記憶體快取限制或清理:首頁推薦串列的每一次 Loadmore 操作,都不會清理之前快取起來的視頻物件,導致用戶長時間停留在推薦 Feed 時,快取起來的視頻物件過多會導致記憶體方面的壓力,在通過實驗驗證不會對業務產生負面影響情況下對首頁的快取進行了一定數量的限制來減小記憶體壓力,

    快取優化

    上面提到的視頻 Model,抖音最早使用 Manager 來管理通用的視頻實體,Manager 使用 HashMap 存盤了所有的視頻物件,最初的方案里面沒有對記憶體大小進行限制且沒有清除邏輯,隨著使用時間的增加而不斷膨脹,最終出現 OOM 例外,為了解決視頻 Model 無限膨脹的問題設計了一套快取框架主要流程如下:

    圖 16. 視頻快取框架

    使用 LRU 快取機制來快取視頻物件,在記憶體中快取最近使用的 100 個視頻物件,當視頻物件從記憶體快取中移除時,將其快取至磁盤中,在獲取視頻物件時,首先從記憶體中獲取,若記憶體中沒有快取該物件,則從磁盤快取中獲取,在退出 App 時,清除 Manager 的磁盤快取,避免磁盤空間占用不斷增長,

    圖片

    關于圖片優化,我們主要從圖片庫的管理和圖片本身優化兩個方面思考,同時對不合理的圖片使用也做了兜底和監控,

    圖片庫

    針對應用內圖片的使用狀況對圖片庫設定了合理的快取,同時在應用 or 系統記憶體吃緊的情況下主動釋放圖片快取,

    圖片自身優化

    我們知道圖片記憶體大小公式 = 圖片解析度 * 每個像素點的大小

    圖片解析度我們通過設定合理的采樣來減少不必要的像素浪費,

    //開啟采樣
    ImagePipelineConfig config = ImagePipelineConfig.newBuilder(context)
        .setDownsampleEnabled(true)
        .build();
    Fresco.initialize(context, config);
    
    //請求圖片時,傳入resize的大小,一般直接取View的寬高
    ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri)
        .setResizeOptions(new ResizeOptions(50, 50))
        .build();mSimpleDraweeView.setController(
        Fresco.newDraweeControllerBuilder()
            .setOldController(mSimpleDraweeView.getController())
            .setImageRequest(request)
            .build());
    

    而單個像素大小,我們通過替換系統 drawable 默認色彩通道,將部分沒有透明通道的圖片格式由 ARGB_8888 替換為 RGB565,在圖片質量上的損失幾乎肉眼不可見,而在記憶體上可以直接節省一半,

    圖片兜底

    針對因 activity、fragment 泄漏導致的圖片泄漏,我們在 onDetachedFromWindow 時機進行了監控和兜底,具體流程如下:

    圖 17. 圖片兜底流程

    圖片監控

    關于對不合理的大圖 or 圖片使用我們在位元組碼層面進行了攔截和監控,在原生 Bitmap or 圖片庫創建時機記錄圖片資訊,對不合理的大圖進行上報;另外在 ImageView 的設定程序中針對 Bitmap 遠超過 view 本身超過大小的場景也進行了記錄和上報,

    圖 18. 圖片位元組碼監控方案

    更多思考

    是不是解決了 OOM 記憶體問題就告一段落了呢?作為一只追求極致的團隊,我們除了解決靜態的記憶體占用外也自研了 Kenzo(Memory Insight)工具嘗試解決動態記憶體分配造成的 GC 卡頓,

    Kenzo 原理

    Kenzo 采用 JVMTI 完成對記憶體監控作業,JVMTI(JVM Tool Interface)是 Java 虛擬機所提供的 native 編程介面,JVMTI 開發時,應用建立一個 Agent 使用 JVMTI,可以使用 JVMTI 函式,設定回呼函式,并從 Java 虛擬機中得到當前的運行態資訊,并作出自己的業務判斷,

    圖 19. Agent 時序圖

    Jvmti SetEventCallbacks 方法可以設定目標虛擬機內部事件回呼,可以根據 jvmtiCapabilities 支持的能力和我們關注的事件來定義需要 hook 的事件,

    Kenzo 采用 Jvmti 完成如下事件回呼:

    • 類加載準備事件 -> 監控類加載

      • ClassPrepare:某個類的準備階段完成,

    • GC -> 監控 GC 事件與時間

      • GarbageCollectionStart:GC 啟動時,

      • GarbageCollectionFinish:GC 結束后,

    • 物件事件 -> 監控記憶體分配

      • ObjectFree:GC 釋放一個物件時,

      • VMObjectAlloc:虛擬機分配一個物件的時候,

    框架設計

    Kenzo 整體分為兩個部分:

    生產端

    • 采集記憶體資料

    • 以 sdk 形式集成到宿主 App

    消費端

    • 處理生產端的資料

    • 輸入 Kenzo 監控的記憶體資料

    • 輸出可視化報表

    圖 20. kenzo 框架

    生產端主要以 Java 進行 API 呼叫,C++完成底層檢測邏輯,通過 JNI 完成底層邏輯控制,

    消費端主要以 Python 完成資料的決議、視圖合成,以 HTML 完成頁面內容展示,

    作業流

    圖 21. kenzo 框架

    可視化展示

    圖 22. kenzo 聚合展示

    啟動階段記憶體歸因

    基于動態記憶體監控我們對最為核心的啟動場景的記憶體分配進行了歸因分析,優化了一些頭部的記憶體節點分配:

    圖 23.啟動階段記憶體節點歸因

    另外我們也發現啟動階段存在大量的字串拼接操作,雖然編譯器已經優化成了 StringBuider append,但是深入 StringBuider 原始碼分析仍在存在大量的動態擴容動作(System.copy),為了優化高頻場景觸發動態擴容的性能損耗,在 StringBuilder 在 append的時候,不直接往 char[]里塞東西,而是先拿一個 String[]把它們都存起來,到了最后才把所有 String 的 length 加起來,構造一個合理長度的 StringBuilder,通過使用編譯時位元組碼替換的方式,替換所有 StringBuilder 的 append 方法使用自定義實作,優化后首次安裝首頁 Feed 滑動 1min 的 FPS 提升 1 幀/S,非首次安裝啟動,滑動 1min 的 FPS 提升 0.6 幀/S,

    加入我們

    我們是負責抖音客戶端基礎技術能力研發和前沿技術探索的客戶端團隊,我們專注于性能、架構、穩定性、研發工具、編譯構建等方向的深耕,保障超大規模團隊的研發效率和工程質量,將 6 億人使用的抖音打造成極致用戶體驗的產品,

    如果你對技術充滿熱情,歡迎加入抖音基礎技術團隊,讓我們共建億級全球化 App,目前我們在上海、北京、杭州、深圳均有招聘需求,內推可以聯系郵箱: tech@bytedance.com ;郵件標題: 姓名 - 作業年限 - 抖音 - 基礎技術 - Android / iOS

    更多分享

    西瓜視頻穩定性治理體系建設一:Tailor 原理及實踐

    基于有限狀態機與訊息佇列的三方支付系統補單實踐

    UME - 豐富的Flutter除錯工具

    一例 Go 編譯器代碼優化 bug 定位和修復決議


    歡迎關注「 位元組跳動技術團隊 」

    簡歷投遞聯系郵箱「 tech@bytedance.com 」

    點擊閱讀原文,快來加入我們吧!

    轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/240948.html

    標籤:AI

    上一篇:清華大學王曉智:大規模通用域事件檢測資料集MAVEN

    下一篇:滴滴在HBase性能與可用性上的探索與實踐

    標籤雲
    其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

    熱門瀏覽
    • 網閘典型架構簡述

      網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

      uj5u.com 2020-09-10 02:00:44 more
    • 如何從xshell上傳檔案到centos linux虛擬機里

      如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

      uj5u.com 2020-09-10 02:00:47 more
    • 一、SQLMAP入門

      一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

      uj5u.com 2020-09-10 02:00:50 more
    • Metasploit 簡單使用教程

      metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

      uj5u.com 2020-09-10 02:00:53 more
    • 游戲逆向之驅動層與用戶層通訊

      驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

      uj5u.com 2020-09-10 02:00:56 more
    • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

      北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

      uj5u.com 2020-09-10 02:01:03 more
    • 【CTF】CTFHub 技能樹 彩蛋 writeup

      ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

      uj5u.com 2020-09-10 02:04:05 more
    • 02windows基礎操作

      我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

      uj5u.com 2020-09-10 02:04:18 more
    • 03.Linux基礎操作

      我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

      uj5u.com 2020-09-10 02:04:30 more
    • 05HTML

      01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

      uj5u.com 2020-09-10 02:04:36 more
    最新发布
    • 2023年最新微信小程式抓包教程

      01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

      uj5u.com 2023-04-20 08:48:24 more
    • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

      Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

      uj5u.com 2023-04-20 08:47:46 more
    • vulnhub_Earth

      前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

      uj5u.com 2023-04-20 07:46:20 more
    • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

      清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

      uj5u.com 2023-04-20 07:44:00 more
    • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

      🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

      uj5u.com 2023-04-20 07:43:36 more
    • 漫談前端自動化測驗演進之路及測驗工具分析

      隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

      uj5u.com 2023-04-20 07:43:16 more
    • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

      摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

      uj5u.com 2023-04-20 07:43:03 more
    • msf學習

      msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

      uj5u.com 2023-04-20 07:42:59 more
    • Halcon軟體安裝與界面簡介

      1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

      uj5u.com 2023-04-20 07:42:17 more
    • 在MacOS下使用Unity3D開發游戲

      第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

      uj5u.com 2023-04-20 07:40:19 more