前言Linux 网络栈中有一个相对较新的特性——SO_REUSEPORT 套接字选项,可以使用它来提升你的服务性能。 图 1: 上面的服务是使用并行监听器来避免请求连接瓶颈,而下面的服务只使用一个监听器来接收连接概要HAProxy 和 NGINX 是少数几个使用 Linux 网络栈中 TCP 的 SO_REUSEPORT 套接字选项[1]的应用程序。这个选项最初是在 4.4 BSD 中引
1、代码的组成package main import "fmt" func main() { /*输出"Hello World!"*/ fmt.Println("hello, world") }第 1 行 package main 定义了包名。必须在源文件中非注释的第 1 行指明这个文件属于哪个包,例如 package main。package main 表示一个可独立执行的程序,每
转载 2024-04-10 14:55:30
127阅读
golang mcall // func mcall(fn func(*g)) // Switch to m->g0's stack, call fn(g). // Fn must never return. It should gogo(&g->sched) // to keep running g.
Golang文件 目录操作 Golang文件 目录操作模式含义os.O_WRONLY只写os.O_CREATE创建文件os.O_RDONLY只读os.O_RDWR读写os.O_TRUNC清空os.O_APPEND追加perm:文件权限,一个八进制数,r(读)04,w(写)02,x(执行)01.package main import ( "fmt"
一.Socket简介在标准库的net包中可供了可移植的网络I/O接口,其中就包含了SocketSocket在TCP/IP网络分层中并不存在,是对TCP或UDP封装如果非要给Socket一个解释实现网络上双向通讯连接的一套API常称Socket为"套接字"Socket分类:按照连接时间短连接长连接(HTTP 1.1开始也支持长连接,Socket替换方案)按照客户端和服务器端数量点对点点对多多对多网络
前言在优化代码或者决定算法选用的时候,性能是很重要的一个指标,比如我最近在做需求的时候需要用哈希算法做签名。一开始想都没想就想用md5,然后IDE上蹦出几个大字:md5有已知的安全问题,建议换成其他算法。然后就考虑换SHA256。问题会不会换一个算法导致性能急剧下降呢?这时Go语言内置的Benchmark功能就很方便的派上用场了。注意,基准测试受环境影响大,应尽量保证环境稳定,测试时尽量CPU别同
Golang 大杀器之性能剖析 PProf前言写了几吨代码,实现了几百个接口。功能测试也通过了,终于成功的部署上线了结果,性能不佳,什么鬼?想做性能分析PProf想要进行性能优化,首先瞩目在 Go 自身提供的工具链来作为分析依据,本文将带你学习、使用 Go 后花园,涉及如下:runtime/pprof:采集程序(非 Server)的运行数据进行分析net/http/pprof:采集 HTTP Se
一、前言为什么想到要用golang来编写metrics呢?这主要是我们的一个客户那里,k8s网络使用了ovs,并且做了bond,即bond0和bond1,每个bond下面2张网卡。在上了生产后,让我每天都要检查一下网卡是否正常,因为之前就有网卡DOWN了。而我呢,比较懒,不想手动去检查。想着通过prometheus最终展示到grafana,我就在grafana上看看有没有处于异常的网卡就好了。其次
原创 2021-12-29 14:42:31
2482阅读
一:背景当正在运行的golang程序消耗预期之外的内存和时间,我们这个时候就需要去弄明白,到底是是我们的代码哪个地方消耗了这些内存及相应时间。但此时编译好的golang程序对我们而言是黑盒,如果去分析具体的内存及时间使用情况?这个时候我们可以去了解和使用pprof来分析golang进程的内存使用。二:实战2.1.环境搭建下载安装golang,需要进到pod容器中(或者也可以将这些打到基础镜像中)$
转载 2024-05-05 12:58:55
348阅读
概要开发web 框架数据库认证日志配置静态文件服务上传/下载发布docker 打包部署中遇到的问题时区问题概要轻量的基于 golang 的 web 开发实践.golang 上手简单, 第三方库丰富, 对于业务没那么复杂的项目, 作为 API 的后端也是不错的选择. 下面是对 golang 作为 API 后端的 web 开发实践总结.开发API 后端的功能模块基本已经固定, 基于自己的项目, 主要使
转载 2024-02-19 20:44:23
64阅读
注意:我在这里给出golang查询关于包的使用的地址:https://godoc.org 声明:  此片文章并非原创,大多数内容都是来自:https://godoc.org/fmt,通过谷歌翻译进行翻译而来。 import "fmt"  fmt包实现了类似C语言printf和scanf的格式化I/O。格式化verb('verb')源自C语言但更简单。Printingverb:通
转载 2024-04-29 21:08:13
47阅读
监测服务级别的指标能让团队成员更清晰的看到你的程序表现如何,你的程序如何被使用,并且可以帮助定位潜在的性能瓶颈。Prometheus 是一个开源的监测解决方案,原生的服务发现支持让它成为动态环境下进行服务监测的一个完美选择。Prometheus 支持从 AWS, Kubernetes, Consul 等 拉取服务 !当使用 Prometheus 生成服务级别的指标时,
转载 10月前
186阅读
Golang 语言 method 接收者使用值类型和指针类型的区别01介绍在 Golang 语言中,function 的参数和 method 的接收者都可以选择使用值传递和指针传递(“引用传递”),需要注意的是,其中指针传递是传递的指针值的副本,而不是指针指向的数据的副本。也就是说 Golang 语言和 C 系的所有语言相同,一切传递都是值传递。本文我们主要介绍 method 的接收者怎么选择使用
转载 9月前
51阅读
Prometheus 提供了官方版 Golang 库用于采集并暴露监控数据。
原创 精选 2023-04-06 12:49:44
876阅读
官方文档githubnodejs 类似框架:anyproxy一、功能简介实时拦截、修改 HTTP/HTTPS 请求和响应可保存完整的 http 会话,方便后续分析和重放支持反向代理模式将流量转发到指定服务器支持 macOS 和 Linux上的透明代理模式支持用 Python 脚本对 HTTP 通信进行修改二、安装pip3 install mitmproxy使用 pip 快速安装 mitmproxy
转载 6月前
20阅读
单线程调度器 · 0.x只包含 40 多行代码;程序中只能存在一个活跃线程,由 G-M 模型组成;多线程调度器 · 1.0允许运行多线程的程序;全局锁导致竞争严重;任务窃取调度器 · 1.1引入了处理器 P,构成了目前的 G-M-P 模型;在处理器 P 的基础上实现了基于工作窃取的调度器;在某些情况下,Goroutine 不会让出线程,进而造成饥饿问题;时间过长的垃圾回收(Stop-the-wor
读取文件读文件方式一:利用ioutil.ReadFile直接从文件读取到[]byte中func Read0() (string){ f, err := ioutil.ReadFile("file/test") if err != nil { fmt.Println("read fail", err) } return string(f) }读文件方
最近在项目中出现golang内存溢出的问题,master刚开始运行时只有10多M,运行几天后,竟然达到了10多个G。而且到凌晨流量变少内存也没有明显降低,内存状态呈现一种很不健康的曲线。像这种情况肯定是golang内存溢出了,为此我持续排查了两天,终于找到问题所在,特此记录下。准备工作一台较好的环境测试机,单台运行无污染。压测工具,无论服务是http还是websocket服务,都必须准备好压测工具
代码示例: 004.struct类型 004.struct类型 1 type声明新类型 1 type声明新类型 1.1 type testInt func(int) bool // 声明了一个函数类型 1.1 type testInt func(int) bool // 声明了一个函数类型 1.2
原创 2021-07-26 14:16:52
362阅读
golang中timer和ticker 都属于time包timer是一次性定时器,执行完一次就结束了,ticker是周期性定时器,周而复始的执行。二者在数据结构上完全一样,都是一个对外的channel + 对内的runtimeTimer。type Timer struct { C <-chan Time r runtimeTimer } type Ticker struct
转载 2024-03-18 06:40:02
84阅读
  • 1
  • 2
  • 3
  • 4
  • 5