Tmctl使用簡介
一、簡要介紹
tmctl是用來實時顯示F5 BIG-IP設備的一些統計信息,比如流量統計,內存/CPU統計,丟包率統計等。
統計出來的信息放在/shared/tmstat/snapshots/blade2/public/3600目錄下。3600指的是間隔時間為一小時,即每隔一小時收集一次統計信息存儲在table表里面。
tmctl的snapshot指F5會固定時間保存tmctl的統計信息,這樣不僅可以看到當前的統計信息,還可以看到過去一段時間的統計信息(最長86400s),通過比較兩次的差值,就可以縮小問題的范圍。

二、內存命令使用
主要查看proc_pid_stat表中參數rss (Resident set size): 虛擬耗用內存
例如如下實例:
proc_pid_stat
=============
time proc_name pid ppid vsize rss
------------------- ---------- ----- ---- ---------- ------
2022-01-01T00:00:00 icrd_child 19747 8356 1410437120 275546
2022-01-02T00:00:00 icrd_child 19747 8356 1413582848 276545
2022-01-03T00:00:00 icrd_child 19747 8356 1417777152 277441
2022-01-04T00:00:00 icrd_child 19747 8356 1421971456 278387
2022-01-05T00:00:00 icrd_child 19747 8356 1426165760 277859
2022-01-06T00:00:00 icrd_child 19747 8356 1429311488 278899
2022-01-07T00:00:00 icrd_child 19747 8356 1433505792 279963
以上在過去一周中大約增加了22MB((1433505792-1410437120) /1024/1024=22MB)
查看占用內存具體使用分為三種:
第一種
想要看某個特定進程占用的內存可以用以下方法查看(示例為篩選 F5的gtmd進程在對應的proc_pid_stat表中每隔一小時的內存使用情況)。
tmctl -D /shared/tmstat/snapshots/ -w 900 proc_pid_stat -s time,proc_name,rss,vsize -R 3600 proc_name=gtmd | more
[root@GTM_A:Active:Changes Pending] config # tmctl -D /shared/tmstat/snapshots/ -w 900 proc_pid_stat -s time,proc_name,rss,vsize -R 3600 proc_name=gtmd | more
proc_pid_stat
=============
time proc_name rss vsize
------------------- --------- ---- ---------
2022-03-16T17:00:00 gtmd 3394 177463296
2022-03-16T18:00:00 gtmd 3396 177463296
2022-03-16T19:00:00 gtmd 3396 177463296
2022-03-16T20:00:00 gtmd 3403 177463296
2022-03-16T21:00:00 gtmd 3402 177463296
2022-03-16T22:00:00 gtmd 3402 177463296
2022-03-16T23:00:00 gtmd 3402 177463296
2022-03-17T00:00:00 gtmd 3402 177463296
2022-03-17T01:00:00 gtmd 3402 177463296
2022-03-17T02:00:00 gtmd 3402 177463296
2022-03-17T03:00:00 gtmd 3402 177463296
2022-03-17T04:00:00 gtmd 3402 177463296
2022-03-17T05:00:00 gtmd 3394 177463296
2022-03-17T06:00:00 gtmd 3394 177463296
2022-03-17T07:00:00 gtmd 3394 177463296
2022-03-17T08:00:00 gtmd 3394 177463296
2022-03-17T09:00:00 gtmd 3394 177463296
2022-03-17T10:00:00 gtmd 3394 177463296
2022-03-17T11:00:00 gtmd 3432 177463296
2022-03-17T12:00:00 gtmd 3422 177463296
2022-03-17T13:00:00 gtmd 3422 177463296
2022-03-17T14:00:00 gtmd 3568 177463296
2022-03-17T15:00:00 gtmd 3553 177463296
第二種
使用proc_pid_stat篩選中占用內存top 20進程
在F5的命令行輸入以下命令:
tmctl -c proc_pid_stat -s proc_name,processor,ppid,vsize,rss | sort -t "," -k 2nr | head -20
[root@GTM_A:Active:Changes Pending] config # tmctl -c proc_pid_stat -s proc_name,processor,ppid,vsize,rss | sort -t "," -k 2nr | head -20
java,7,31495,762003456,143994
tmm.0,0,31488,10543349760,44492
java,2,6943,5191925760,156531
java,2,30926,2821783552,64291
java,7,6944,1382432768,82413
apmd,7,6589,4796911616,26105
oauth,6,6938,1116733440,10396
avrd,6,6595,3352637440,59516
icrd_child,4,30391,371249152,32360
dosl7d,3,4748,5305790464,33236
f5-rest-node,2,8159,1311219712,18315
eca,2,7373,1443397632,11907
mysqld,2,3048,1360429056,97037
icrd_child,2,30391,367054848,29881
asm_config_serv,7,7119,281735168,36193
asm_config_serv,7,7119,218488832,21666
websso,7,31507,390803456,8660
websso,7,31507,390799360,8658
rewrite,7,31434,295997440,8620
rewrite,7,31434,295997440,8620
第三種
篩選出在某一特定時間段占用內存top 15進程(比如可篩選在23點和24點時間段占用內存較高的進程,然后比較一下哪個進程有變化,再針對性地去看進程)。F5命令如下:
tmctl -lf ./blade0-public-3600-2022-03-16T17\:00\:00 proc_pid_stat -s vsize,rss,resident,proc_name | sort -nrk1 | head -n 15
[root@GTM_A:Active:Changes Pending] 3600 # tmctl -lf ./blade0-public-3600-2022-03-16T17\:00\:00 proc_pid_stat -s vsize,rss,resident,proc_name | sort -nrk1 | head -n 15
10,543,349,760 44,492 44,492 tmm.0
5,305,790,464 33,305 33,305 dosl7d
5,191,708,672 153,272 153,272 java
4,796,911,616 30,748 30,748 apmd
3,349,983,232 8,505 8,505 admd
3,348,488,192 57,949 57,949 avrd
3,135,827,968 42,928 42,928 bd
3,040,403,456 8,187 8,187 pabnagd
2,754,674,688 65,547 65,547 java
2,660,126,720 7,558 7,558 dwbld
2,584,068,096 6,709 6,709 botd
2,524,770,304 6,615 6,615 mgmt_acld
2,520,166,400 5,775 5,775 datasyncd
1,576,562,688 9,909 9,909 monpd
1,443,397,632 11,917 11,917 eca
注:-D 在使用到snapshot時必須使用
-w表示輸出的寬度
-s 輸出哪些列,用逗號分開
-C 以CSV格式輸出
-R 間隔時間
其他關于tmctl各個參數的解釋可進入到F5命令行 tmctl -h輸出查看。
三、其他命令使用
tmctl -d blade virtual_server_cpu_stat
這個用來顯示過去的5秒鐘/1分鐘/5分鐘時間內F5設備每個VS的CPU使用率,偶數核(數據平面CPU,也就是tmm)的CPU使用率很高,我們就要重點關注一下這個VS。

tmctl –d blade rst_cause_stat
這個表用來顯示IG-IP發送TCP RESET的統計,如果我們在某段時間里看到F5發送了大量的TCP reset包,無法抓包的情況下可以連續的輸出幾次這個table來看那個統計值增長的最快來確定原因。

tmctl -d blade cpu_info_stat
獲取BIG-IP每個核CPU利用率

四、額外補充:
理論上我們所有SNMP mib值和我們在F5 特有的tmsh里show出來的數據,其原始數據都保存在tmctl的各種table表里。但如果出現以下兩種情況,那用tmctl -d Blade命令收集數據失敗,需要使用命令tmctl -d /var/tmstat/blade來收集數據。
1.您正在使用 SNMP 自定義 MIB。
2.您有一個調用tmctl -d Blade命令的自定義腳本,該命令收集自定義 SNMP MIB 的信息。