Recent Posts
-
June 29, 2022
Glibc默认发送aaaa类型ipv6地址的dns查询和程序5秒卡顿的现象
发现 nslookup www.baidu.com curl https://www.baidu.com 经常5秒才会返回,但nslookup其实很快就返回了A类型的ipv4地址了。 自己抓包发现是, 默认会发送 A 和AAAA这两种类型的 dns查询,AAAA 类型的响应慢或者无响应导致的,可能有些dns代理缓存对 AAAA类型支持不好导致,还挺常见的。但AAAA类型查询用不上,但却禁止不了,linux下面禁用ipv6这些都没有用。这个好像是glibc的默认行为,并没有设置可以禁止...
-
June 27, 2022
Bash脚本里面 command substitution 语法执行函数设置的环境变量不会被应用
ouput=$(command) # 执行命令,把输出赋值给output变量 output=$(func1 parm1) # 执行函数,把输出赋值给output变量这种 Command Substitution 是在 “ subshell environment‘ 里面执行, 估计是在子进程还是什么环境里面执行的,所以设置的环境变量 不会被当前环境继承。 只能改成 不用这种方式执行函数了,直接func1 parm1 调用,然后子啊func1里面使用全局变量来传递返回值...
-
May 13, 2022
Linux内核模块申请huge page内存
vmalloc好像被改造成自动申请huge page了,后面还增加一个vmalloc_no_huge函数,但好像引入了一些问题,有的开发者还想增加一个module_alloc_huge函数不知道最后会不会增加进去。https://lwn.net/Articles/892743/ The BPF allocator runs into trouble
-
May 10, 2022
Perl和python的ssh client例子
#!/usr/bin/perluse Net::SSH::Perl;my %params;$params{"debug"} = true;my $ssh = Net::SSH::Perl->new("192.168.1.1", %params);$ssh->login("admin", "admin");my($stdout, $stderr, $exit) = $ssh->cmd("df -h");print $stdout;import paramikoparamik...
-
April 26, 2022
Golang的嵌入式脚本starlark
类似python的语法主要的文档:https://github.com/google/starlark-go https://github.com/google/starlark-go/blob/master/doc/spec.md https://pkg.go.dev/go.starlark.net/starlark例子在telegraf里面有:https://github.com/influxdata/telegraf/tree/master/plugins/processors/...
-
April 18, 2022
Tcp拥塞控制算法设置相关
运行时修改系统默认tcp拥塞控制算法/proc/sys/net/ipv4/tcp_available_congestion_controlecho bbr > /proc/sys/net/ipv4/tcp_congestion_control内核里面创建tcp socket时初始化默认的拥塞控制算法tcp_init_sock tcp_assign_congestion_control(sk);内核修改某个socket的拥塞控制算法的接口do_tcp_setsockopt(TCP_...
-
April 15, 2022
Golang程序随机出现cpu 100%的bug
https://github.com/golang/go/issues/51654 v1.16.7 ~ v1.18 都会出现这个bug。线上的机器遇到的好像就是这个问题,golang的应用一天中随机出现几次cpu 100%的问题,过几秒可能就恢复正常.看描述好像说是在不同的goroutine里面修改同一个Timer场景会导致这个问题。用perf采样,cpu利用率调用栈大概是这样的。 32.70% [.] runtime.stealWork 12.51% [...
-
April 15, 2022
Golang程序加载tls证书的代码
func loadTLSConfig(c *ServiceConfig) *tls.Config { cfg := &tls.Config{} if len(c.CertFile) > 0 && len(c.KeyFile) > 0 { cert, err := tls.LoadX509KeyPair(c.CertFile, c.KeyFile) // "example-cert.pem" "example-key.pem if err != nil...
-
March 29, 2022
Linux的lo网络设备loopback
dev.c 文件里面net_dev_init 函数会为每个net创建和初始化loopback_dev,在路由模块等地方会引用到这个loopback设备。 典型的比如local output的流量在 ip rule里面对应的iif就是 lo(loop back)设备。struct net { struct net_device *loopback_dev; /* The loopback */}/* Setup and register the loop...
-
March 24, 2022
Jsoniter里面解码某个json节点为特定struct
package mainimport ( jsoniter "github.com/json-iterator/go")type Info map[string]stringfunc main() { input := []byte(`{"type":"test","desc":"test","info":[{"a": "dd", "b":"ddd"}]}`) m := map[string]interface{}{} var info []GuestInfo var json = jso...