原创 安卓 cronet 庫 JNI ERROR (app bug): local reference table overflow (max=512)

1、問題背景 由於定位問題需要,將 cronet 庫中 quic 部分的 LOG_LEVEL 爲 -3 級別的日誌一併通過回調函數輸出了, 但導致了 cronet 庫的崩潰,崩潰的直接原因是輸出日誌過多,導致了 jni 層的局部引

原创 服務器上很多 ffmpeg 進程未及時結束導致大量佔用內存

最近在 pre 機器上過濾 ffmpeg 進程時,發現有 200 多個 ffmpeg 進程, 立即去線上看了下,發現線上機器沒有該現象, 仔細看了下這些進程在做的事,完整命令如下: /usr//bin/ffmpeg -fflags

原创 執行命令時加 sudo 出現 error while loading shared libraries: cannot open shared object file

最近在爲直播系統增加三方轉推功能時, 發現服務在執行轉推命令時出現錯誤: /usr/local/ffmpeg/3.1.2/bin/ffmpeg: error while loading shared libraries: libl

原创 golang runtime.Caller(skip int) 介紹

函數原型,及官方描述: func Caller(skip int) (pc uintptr, file string, line int, ok bool) // 函數用途 Caller reports file and lin

原创 編譯 cronet android 庫時出現 Template collision【contains a template "split_static_library"】

該錯誤出現在執行 ./components/cronet/tools/cr_cronet.py gn --debug --out_dir=out/debug-Cronet 時, 錯誤提示已經比較明顯了, 就是在兩個不同的文件

原创 梳理 golang 項目源碼時的幾點收穫

今天在看一個 golang 項目的源碼時,有幾個地方沒明白,然後順手谷歌了一會,初步知道了原因。 1、驗證結構體是否實現了某個接口 假設接口如下: type IModule interface { Name() string

原创 業務反饋服務內網地址出現 502 錯誤問題排查

有業務端反饋直播建流服務內網地址出現 502 Bad Gateway 錯誤,並且公網訪問是正常的。 502 錯誤是服務端未及時響應導致客戶端出現超時,在有代理的情況下,是代理訪問後端服務出現超時,業務端請求的訪問路徑如下: 業務端

原创 在 jenkins 環境源碼編譯 nginx 時提示 PCRE not found

跟 jenkins 維護同事確認了 pcre 庫已安裝,但是仍然出現該錯誤, 後 google 到可能是因爲缺少 pcre-devel 庫導致,安裝 xxx-devel 會安裝相應庫的頭文件目錄, 如果沒有 pcre-devel

原创 chromium 源碼賞析之委託模式

在閱讀 chromium 網絡棧源碼時,經常需要去跟蹤類中的 delegate_ 成員具體的類別, 後來發現這應該是某種設計模式,因此拿出設計模式書籍看了下經典的 23 種設計模式, 發現有可能相關的是觀察者模式和訪問者模式,但在

原创 I/O 多路複用使用背景梳理

內容總結自 《UNIX 環境高級編程》 高級 I/O 部分 1. 問題背景描述 在終端使用 telnet 命令連接到一個 TCP server,假設 server 會返回你在終端輸入的內容。 那麼現在終端的這個 telnet 進程

原创 【翻譯】ietf-quic-draft-24: 9. Connection Migration

英文原文鏈接: 9. Connection Migration 連接 ID 的使用允許連接在端點改變地址(IP和端口)時可以繼續使用,比如發生了網絡切換。 這一節描述發生地址改變的一端的處理過程。 QUIC 的設計依賴與

原创 控制 nginx 啓停的兩種方式以及二進制 nginx 文件升級介紹

nginx 啓動時會啓動一個主進程,和一個或多個工作進程,前者主要是讀取並檢查配置文件的合法性;後者則處理實際的請求。 控制 nginx 有兩種方式,一種是用 kill 發送信號到 nginx 的主進程(即 nginx.pid 中

原创 理解傳輸協議支持更多選擇確認段時能 keep more bytes on the wire

最近重讀谷歌 2017 年發表的 QUIC 論文時,針對 QUIC 支持更多選擇確認段這一特性,提到由於該特性 QUIC 可以 keep more bytes on the wire, 我一開始的理解是更多選擇確認段應該是讓發送端

原创 使用 logrotate 切割服務日誌

後端開發常遇到的一個問題是,服務產生的日誌文件過大,在使用日誌文件排查問題時, 如果文件過大,會降低排查問題的效率;而且不對文件進行切割,就沒法單獨的壓縮較久遠的日誌,浪費磁盤空間 下面介紹 linux 下常用的日誌切割工具 lo

原创 在 mac 平臺編譯 cronet-ios 時出現 is not one of the valid types

在編譯指定版本(比如 75.0.3770)的 cronet-ios 時,總是出現下圖的錯誤: 主要錯誤內容爲: ERROR at //third_party/protobuf/proto_library.gni : Only s