用systemtap來修改下linux核心變數的值

2021-08-30 07:05:14 字數 1018 閱讀 2954

我們在探索linux核心的時候,經常需要調整下變數的值,看它對系統的影響。如果這個值沒有透過/proc來修改的話,那只能編譯核心。這個步驟是非常繁瑣的。現在我們有systemtap這個利器來幫忙了。

演示如下:

我們通過修改過

extern int sysctl_tcp_fin_timeout;的值來達到目的。是因為這個值是proc匯出的 我們好驗證是否成功。

root@localhost ~]# cat /proc/sys/net/ipv4/tcp_fin_timeout

15000

# cat test.stp

probe begin

probe kernel.function("do_tcp_setsockopt")

# stap -g test.stp 18000

ready go

這個時候 stap在執行, 只是還沒有觸發do_tcp_setsockopt.

現在我們來觸發

# erl

erlang r13b02 (erts-5.7.3) [source] [64-bit] [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:false]

eshell v5.7.3 (abort with ^g)

1> = gen_tcp:listen(0, ).

2>

2> inet:setopts(lsock, ).

ok3>

ok,這時候回頭可以看到stap打出來以下:

sysctl_tcp_fin_timeout = 18000

我們來驗證下:

root@localhost ~]# cat /proc/sys/net/ipv4/tcp_fin_timeout

18000

ok,成功。

tips:

1. stap對全域性變數的寫需要-g guru模式。

2. 全域性變數必須在乙個單元內的函式裡面才可以修改, 而且必須是在核心上下文。

linux下用python來批量修改檔名

我們在維護系統的時候,有時候遇到需要批量修改乙個資料夾下的所有檔名,這個時候,如果用人工手動的去修改的話,那就太沒有效率了,這個時候我們需要乙個指令碼來完成我們的任務,當然用shell,perl也可以完成,今天這裡介紹的是用python來解決這個問題,我們假設在 root test 下面有4個檔案,...

用Visual C 來建立 修改登錄檔資訊

在 如何讀取註冊資訊 和 用visual c 來刪除登錄檔中的註冊資訊 文章中,已經 了用visual c 來讀取 刪除登錄檔中的註冊資訊,在本篇文章中我們就來介紹visual c 登錄檔程式設計的另外二個重要的操作 建立註冊資訊和修改註冊資訊。在上二篇文章中,我們已經知道,由於visual c 本...

用dom4j來修改xml文件

用dom4j來修改xml文件 建立文件document document document documenthelper.createdocument 建立元素 element element document.addelement 元素名稱 建立屬性 element.addattribute 屬性...