亚欧色一区w666天堂,色情一区二区三区免费看,少妇特黄A片一区二区三区,亚洲人成网站999久久久综合,国产av熟女一区二区三区

  • 發布文章
  • 消息中心
點贊
收藏
評論
分享
原創

nginx常用排查手段

2024-06-26 09:44:27
19
0

一、debug_pool內存排查利器

1)接口調用觀察,使用方法

$ curl xxx://localhost:80/debug_pool
pid:18821
size: 223784 num: 2 cnum: 1 lnum: 10 ngx_init_cycle
size: 1536 num: 4 cnum: 1 lnum: 10 ngx_event_accept
size: 0 num: 1 cnum: 0 lnum: 0 ngx_http_lua_create_fake_request
size: 0 num: 1 cnum: 0 lnum: 0 main
size: 0 num: 1 cnum: 0 lnum: 0 ngx_http_lua_create_fake_connection
size: 0 num: 1 cnum: 0 lnum: 6 ngx_http_server_names
size: 8192 num: 4 cnum: 1 lnum: 0 ngx_http_create_request
size: 0 num: 1 cnum: 0 lnum: 0 ngx_http_lua_init_worker
size: 228KB num: 15 cnum: 3 lnum: 26 [SUMMARY]

2)指定pid觀察

你可以使用gdb腳本debug_pool.gdb來獲取指定進程的內存使用情況。
某些進程無法處理HTTP請求,列如master進程和tengine Proc 進程。
下面的示例展示如何獲取master進程的內存使用情況。

$ gdb -q -x debug_pool.gdb -p <pid of master process>
(gdb) debug_pool
size: 16384 num: 1 cnum: 1 lnum: 0 ngx_http_user_agent_create_main_conf:24
size: 0 num: 1 cnum: 0 lnum: 0 main:224
size: 150312 num: 2 cnum: 1 lnum: 13 ngx_init_cycle:824
size: 166696 num: 4 cnum: 2 lnum: 13 [SUMMARY]
3)參數說明

除了最后一行的每一行的輸出內容都有相同的格式,如下:

"__size__: %12u __num__: %12u __cnum__: %12u __lnum__: %12u __\<function name\>__"

  • size: 當前內存池占用的內存
  • num: 內存池創建的個數(包括當前正在使用的內存池數量和已經被釋放的內存池數量)
  • cnum: 當前正在使用的內存池數量
  • lnum: 該類內存池調用ngx_palloc_large()次數
  • funcion name: 創建該內存池的nginx/tengine C函數的函數名
    • 通過創建該內存池的函數的函數名,我們可以知道各個模塊的內存使用情況,列如:
    • ngx_http_create_request創建的內存池用于HTTP請求。
      • 因為大多數模塊直接從該內存池上分配內存,所以很難區分具體哪個模塊使用了內存。
    • ngx_event_accept創建的內存池用于TCP連接。
    • ngx_init_cycle創建的內存池用于解析nginx/tengine的配置和保存其他全局數據結構。
    • ngx_http_lua_init_worker用于指令init_worker_by_lua。
    • ...

最后一行的輸出內容匯總了所有內存池的信息。

二、asan掃描

1.安裝asan庫

RUN yum install devtoolset-7-libasan-devel -y

2.支持asan編譯

RUN cd /root/nginx-rtsp/openresty-1.19.3.2 && ASAN_OPTIONS=detect_leaks=0 ./configure --prefix=/opt/nginx            \
                   --with-pcre-jit                                         \
                   --with-http_ssl_module                                  \
                   --with-http_v2_module                                   \
                   --add-module=../ngx_rtsp_module                         \
                   --add-module=../ngx_ff_module                           \
                   --add-module=../nginx-toolkit-module                    \
                   --add-module=../nginx-client-module                     \
                   --add-module=../nginx_upstream_check_module             \
                   --add-module=../ngx_http_upstream_dyups_module          \
                   --add-module=../3rdparty/ngx_debug_pool                 \
                   --with-cc-opt="-Werror -W -g -O0 -fno-omit-frame-pointer -fsanitize=address -fsanitize-recover=address" \
                   --with-ld-opt="-fsanitize=address -fsanitize-recover=address -lpthread"

3.環境變量配置

ENV ASAN_OPTIONS=halt_on_error=0:detect_container_overflow=0

4.掃描結果查看

過濾error.log日志AddressSanitizer字段排查異常。

三、perf & FlameGraph火焰圖分析

1)下載地址:官方下載FlameGraph即可。

2)使用說明:

perf record -e cpu-clock -g -p 1451612                                                   //-p指定pid值,生成perf.data
perf script -i perf.data > perf.script                                                         //解析
./FlameGraph-master/stackcollapse-perf.pl perf.script >pref.folded     //符號折疊
./FlameGraph-master/flamegraph.pl pref.folded >perf.svg                  //火焰圖生成

0條評論
0 / 1000
余****東
4文章數
0粉絲數
余****東
4 文章 | 0 粉絲
余****東
4文章數
0粉絲數
余****東
4 文章 | 0 粉絲
原創

nginx常用排查手段

2024-06-26 09:44:27
19
0

一、debug_pool內存排查利器

1)接口調用觀察,使用方法

$ curl xxx://localhost:80/debug_pool
pid:18821
size: 223784 num: 2 cnum: 1 lnum: 10 ngx_init_cycle
size: 1536 num: 4 cnum: 1 lnum: 10 ngx_event_accept
size: 0 num: 1 cnum: 0 lnum: 0 ngx_http_lua_create_fake_request
size: 0 num: 1 cnum: 0 lnum: 0 main
size: 0 num: 1 cnum: 0 lnum: 0 ngx_http_lua_create_fake_connection
size: 0 num: 1 cnum: 0 lnum: 6 ngx_http_server_names
size: 8192 num: 4 cnum: 1 lnum: 0 ngx_http_create_request
size: 0 num: 1 cnum: 0 lnum: 0 ngx_http_lua_init_worker
size: 228KB num: 15 cnum: 3 lnum: 26 [SUMMARY]

2)指定pid觀察

你可以使用gdb腳本debug_pool.gdb來獲取指定進程的內存使用情況。
某些進程無法處理HTTP請求,列如master進程和tengine Proc 進程。
下面的示例展示如何獲取master進程的內存使用情況。

$ gdb -q -x debug_pool.gdb -p <pid of master process>
(gdb) debug_pool
size: 16384 num: 1 cnum: 1 lnum: 0 ngx_http_user_agent_create_main_conf:24
size: 0 num: 1 cnum: 0 lnum: 0 main:224
size: 150312 num: 2 cnum: 1 lnum: 13 ngx_init_cycle:824
size: 166696 num: 4 cnum: 2 lnum: 13 [SUMMARY]
3)參數說明

除了最后一行的每一行的輸出內容都有相同的格式,如下:

"__size__: %12u __num__: %12u __cnum__: %12u __lnum__: %12u __\<function name\>__"

  • size: 當前內存池占用的內存
  • num: 內存池創建的個數(包括當前正在使用的內存池數量和已經被釋放的內存池數量)
  • cnum: 當前正在使用的內存池數量
  • lnum: 該類內存池調用ngx_palloc_large()次數
  • funcion name: 創建該內存池的nginx/tengine C函數的函數名
    • 通過創建該內存池的函數的函數名,我們可以知道各個模塊的內存使用情況,列如:
    • ngx_http_create_request創建的內存池用于HTTP請求。
      • 因為大多數模塊直接從該內存池上分配內存,所以很難區分具體哪個模塊使用了內存。
    • ngx_event_accept創建的內存池用于TCP連接。
    • ngx_init_cycle創建的內存池用于解析nginx/tengine的配置和保存其他全局數據結構。
    • ngx_http_lua_init_worker用于指令init_worker_by_lua。
    • ...

最后一行的輸出內容匯總了所有內存池的信息。

二、asan掃描

1.安裝asan庫

RUN yum install devtoolset-7-libasan-devel -y

2.支持asan編譯

RUN cd /root/nginx-rtsp/openresty-1.19.3.2 && ASAN_OPTIONS=detect_leaks=0 ./configure --prefix=/opt/nginx            \
                   --with-pcre-jit                                         \
                   --with-http_ssl_module                                  \
                   --with-http_v2_module                                   \
                   --add-module=../ngx_rtsp_module                         \
                   --add-module=../ngx_ff_module                           \
                   --add-module=../nginx-toolkit-module                    \
                   --add-module=../nginx-client-module                     \
                   --add-module=../nginx_upstream_check_module             \
                   --add-module=../ngx_http_upstream_dyups_module          \
                   --add-module=../3rdparty/ngx_debug_pool                 \
                   --with-cc-opt="-Werror -W -g -O0 -fno-omit-frame-pointer -fsanitize=address -fsanitize-recover=address" \
                   --with-ld-opt="-fsanitize=address -fsanitize-recover=address -lpthread"

3.環境變量配置

ENV ASAN_OPTIONS=halt_on_error=0:detect_container_overflow=0

4.掃描結果查看

過濾error.log日志AddressSanitizer字段排查異常。

三、perf & FlameGraph火焰圖分析

1)下載地址:官方下載FlameGraph即可。

2)使用說明:

perf record -e cpu-clock -g -p 1451612                                                   //-p指定pid值,生成perf.data
perf script -i perf.data > perf.script                                                         //解析
./FlameGraph-master/stackcollapse-perf.pl perf.script >pref.folded     //符號折疊
./FlameGraph-master/flamegraph.pl pref.folded >perf.svg                  //火焰圖生成

文章來自個人專欄
文章 | 訂閱
0條評論
0 / 1000
請輸入你的評論
0
0