可以去DELVE官网进行下载。
关于delve工具的介绍,这里简单给大家介绍一下。
delve在go项目及应用的开发中可以用来追踪程序中的异常代码,也可以通过打日志的方式追查问题,但是更重要也是非常厉害的一点,就是delve可以直接分析程序执行的情况。这一点在后期或线上的问题排查中无疑是提供了一个非常大的便捷。
Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言。
Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style 并发计算。
Go的语法接近C语言,但对于变量的声明有所不同。Go支持垃圾回收功能。Go的并行模型是以东尼·霍尔的通信顺序进程(CSP)为基础。
采取类似模型的其他语言包括Occam和Limbo,但它也具有Pi运算的特征,比如通道传输。在1.8版本中开放插件(Plugin)的支持,这意味着现在能从Go中动态加载部分函数。
Delve常用命令
命令功能:
dlv attach后面跟 pid,用来Debug编译好的Golang程序。
dlv core用于 coredump。
dlv debug后面跟要调试的 go 文件,进入 Debug。
dlv testDebug test 函数。
任何一款采集 agent 进行公司内全面推广前都需要进行性能测试以及资源限制功能测试,以保证:
对于 Filebeat 这款号称 golang 编写,性能强于 logstahs-forwarder 的采集 agent,我们也需要这样进行严谨对待。
硬件选择虚拟机,6cores + 16GB Mem + 175GB SSD + 1000Mbps 带宽;
Filebeat 配置,输出到 console:
Filebeat 配置,输出到 Kafka:
我们开启 Filebeat 的 6060 端口,并使用 python 脚本进行指标采集。
expvar_rates.py ,每秒统计出 Filebeat 指标,主要看:
Step1. 启动 Filebeat (172.16.134.8)
Step2. 启动统计脚本
Step3. 启动 tsar
Step4. 写入压测数据(6个进程写入,6千万条日志)
在 6 进程数据写入日志文件时,我们在开启 python 统计脚本的窗口得到如下稳定的统计数据:
我们在 tsar 看到的统计数据为:
我们在 top 中可以看到 Filebeat 大致占据了 0.8 cores。
在 6 进程数据写入日志文件后,我们在开启 python 统计脚本的窗口得到如下稳定的统计数据:
我们在 tsar 看到的统计数据为:
我们在 top 中可以看到 Filebeat 大致占据了 1.6 cores。
小结:
测试步骤和上述一致,区别在于配置文件需要输出到 Kafka。
在 6 进程数据写入日志文件时,我们在开启 python 统计脚本的窗口得到如下稳定的统计数据:
我们在 tsar 看到的统计数据为:
我们在 top 中可以看到 Filebeat 大致占据了 0.7~0.8 cores。
在 6 进程数据写入日志文件后,我们在开启 python 统计脚本的窗口得到如下稳定的统计数据:
我们在 tsar 看到的统计数据为:
我们在 top 中可以看到 Filebeat 大致占据了 2.0 cores。
小结:
测试步骤和上述一致,区别在于配置文件需要输出到 Kafka。
和上述步骤不同的是,启动 Filebeat 时需要 systemd 限制 CPU、句柄数,根据之前的理论,句柄数限制在 100 已经非常够用,CPU 限制在 1 core。
修改 /usr/lib/systemd/system/filebeat.service :
执行 reload:
对 CPU 进行限制:
确认是否限制成功:
有如下输出表示OK:
在 6 进程数据写入日志文件时,我们在开启 python 统计脚本的窗口得到如下稳定的统计数据:
我们在 tsar 看到的统计数据为:
我们在 top 中可以看到 Filebeat 大致占据了 0.7 ~ 0.8 cores。
在 6 进程数据写入日志文件后,我们在开启 python 统计脚本的窗口得到如下稳定的统计数据:
我们在 tsar 看到的统计数据为:
我们在 top 中可以看到 Filebeat 大致占据了 1.0 cores,限制生效。
小结:
在 6 进程数据写入日志文件时,我们在开启 python 统计脚本的窗口得到如下稳定的统计数据:
我们在 tsar 看到的统计数据为:
我们在 top 中可以看到 Filebeat 大致占据了 0.75 ~ 0.9 cores。
在 6 进程数据写入日志文件后,我们在开启 python 统计脚本的窗口得到如下稳定的统计数据:
我们在 tsar 看到的统计数据为:
我们在 top 中可以看到 Filebeat 大致占据了 1.0 cores,限制生效。
小结:
在 6 进程数据写入日志文件时,我们在开启 python 统计脚本的窗口得到如下稳定的统计数据:
我们在 tsar 看到的统计数据为:
我们在 top 中可以看到 Filebeat 大致占据了 0.7 ~ 0.75 cores。
在 6 进程数据写入日志文件后,我们在开启 python 统计脚本的窗口得到如下稳定的统计数据:
我们在 tsar 看到的统计数据为:
我们在 top 中可以看到 Filebeat 大致占据了 0.9 cores,未达到限制。
小结:
A. FB 全力采集 247B 数据(真实环境类似日志长度),速率为 ~ 40K/s,CPU 开销为 2 cores;
B. FB 在 CPU 限制 1 cores 情况下,采集 247B 数据速率为 ~ 20K/s,可以认为单核采集速率为 ~ 20K/s/core;
C. 日志单行数据越大,吞吐越小,5KB 每行已经非常夸张,即使如此,没有压缩的情况下带宽消耗 35MBps,gzip 压缩率一般为 0.3~0.4,占用带宽为 10.5~14MBps,对于千兆网卡来说压力较小;
go语言抓包工具的网站:
1,sql2go网。
用于将 sql 语句转换为 golang 的 struct. 使用 ddl 语句即可。
例如对于创建表的语句: show create table xxx. 将输出的语句,直接粘贴进去就行。
2,toml2go网。
用于将编码后的 toml 文本转换问 golang 的 struct。
3,curl2go网。
用来将 curl 命令转化为具体的 golang 代码。
4,json2go网。
用于将 json 文本转换为 struct。
5,mysql 转 ES 工具网站。
模拟模板的工具,在支持泛型之前,可以考虑使用。7)查看某一个库的依赖情况,类似于 go list 功能。
GO语言简介:
Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言。
Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style 并发计算。
当前有两个Go编译器分支,分别为官方编译器gc和gccgo。官方编译器在初期使用C写成,后用Go重写从而实现自举。Gccgo是一个使用标准GCC作为后端的Go编译器。
官方编译器支持跨平台编译(但不支持CGO),允许将源代码编译为可在目标系统、架构上执行的二进制文件。