浏览 3035 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-10-29
最后修改:2009-10-29
演示如下: 我们通过修改过 extern int sysctl_tcp_fin_timeout;的值来达到目的。是因为这个值是proc导出的 我们好验证是否成功。 root@localhost ~]# cat /proc/sys/net/ipv4/tcp_fin_timeout 15000 [root@localhost ~]# cat test.stp probe begin { printf("ready go\n"); } probe kernel.function("do_tcp_setsockopt") { $sysctl_tcp_fin_timeout = $1 printf("sysctl_tcp_fin_timeout = %d\n", $sysctl_tcp_fin_timeout); exit() } [root@localhost ~]# stap -g test.stp 18000 ready go 这个时候 stap在运行, 只是还没有触发do_tcp_setsockopt. 现在我们来触发 [root@localhost ~]# 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> {ok, LSock} = gen_tcp:listen(0, []). {ok,#Port<0.437>} 2> 2> inet:setopts(LSock, [{nodelay,true}]). ok 3> 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. 全局变量必须在一个单元内的函数里面才可以修改, 而且必须是在内核上下文。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-10-29
跑这个例子前提是你的stap配置好了,标准就是可以跑 stap topsys.stp
|
|
返回顶楼 | |
发表时间:2009-10-29
呵呵,真方便
|
|
返回顶楼 | |
发表时间:2009-10-29
这个是秘密武器 无敌的
|
|
返回顶楼 | |