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 的信息。