golang too many open files

背景: 需要做一个小文件下载工具,需要做到并发,使用了beego的httplib作为http资源的下载工具, 在服务器上没什么问题(有问题没暴露),但是在本地机器上出现too many open files 查因 这是一个unix上一个比较常见的错误,问题是怎么出现的呢,明明已经限制的协程的数量。怎么会出现过多的socket连接导致文件数超限。 通过获取进程打开文件数 明显看到socket的数量明显多于预期。什么原因导致没有关闭连接 检查代码发现自己也是简单的用了httplib.Get函数然后使...阅读全文

简书 2020-08-25 18:32:40 钱tao

Go语言web之session使用

由于golang官方没有提供session标准库,我们在开发过程中会遇到session处理的问题,今天笔者推荐我写的一个库给大家使用~谢谢。 支持session 增删改查操作 支持单机内存存储 支持分布式存储 分布式Redis存储 Use Example go get package 使用下面命令安装这个库 go get -u github.com/higker/go-session Example Code 使用例子 package main import ( "fmt" "github.co...阅读全文

简书 2020-08-25 17:32:41 Higker

服务树系列(一):什么是服务树及其核心功能

前言服务树这个名词几乎所有运维和运维开发同学都不陌生,但是服务树的原理和为啥用服务树估计大家并不了解,本文先来讨论下这些基本概念,下文讨论如何实现,下图为其核心组件stree-index服务树与资源管理其实无论是引入CMDB或服务树的一个重要目的是完成对应用运行所依赖的资源管理资源包含什么既然是应用运行时依赖的,那么自然能想到的是诸如ecs/elb/rds/dcs/domain/等ecs:就是机器,具体可以是虚拟机/物理机,可以轻松的设计出这一张表+-------------------+---...阅读全文

Segmentfault 2020-09-01 12:32:34 ning1875

Go语言web之session使用

**由于golang官方没有提供session标准库,我们在开发过程中会遇到session处理的问题,今天笔者推荐我写的一个库给大家使用~谢谢。** - 支持session 增删改查操作 - 支持单机内存存储 - 支持分布式存储 - 分布式Redis存储 ## Use Example 1. go get package 使用下面命令安装这个库 `go get -u github.com/higker/go-session` 2. Example Code ...阅读全文

Go语言中文网 2020-08-25 17:19:58 higker

为什么 Golang 函数赋值会产生内存分配?

缘起这几天在重构某段代码后,做了一次性能测试,火焰图中发现了一个十分奇怪的runtime.newobject的调用,大致占用2%,而找遍了整段代码都没有发现有新建对象相关的逻辑。于是迫不得已,祭出了汇编大法,终于定位到了问题所在。这篇文章会使用一段最小可复现的代码来分享这个问题以及背后的原因。Show me the code12345678910111213141516171819202122232425262728293031323334353637383940414243444546pack...阅读全文

Pure White 2020-06-30 00:00 Pure White

踩了 Golang sync.Map 的一个坑

缘起最近 Go 1.15 发布了,我也第一时间更新了这个版本,毕竟对 Go 的稳定性还是有一些信心的,于是直接在公司上了生产。结果,上线几分钟,就出现了 OOM,于是 pprof 了一下 heap,然后赶紧回滚,发现某块本应该在一次请求结束时被释放的内存,被保留了下来而且一直在增长,如图(图中的 linkBufferNode):这次上线的变更只有 Go 版本的升级,没有任何其它变动,于是在本地开始测试,发现在本地也能百分百复现。排查过程看了 Go 1.15 的 Release Note,发现有俩...阅读全文

Pure White 2020-08-24 00:00 Pure White

从零搭建Spring Boot脚手架(7):整合OSS作为文件服务器

1. 前言 文件服务器是一个应用必要的组件之一。最早我搞过FTP,然后又用过FastDFS,接私活的时候我用MongoDB也凑合凑合。现如今时代不同了,开始流行起了OSS。 Gitee: https://gitee.com/felord/kono day06 分支 欢迎Star GitHub: https://github.com/NotFound403/kono day06 分支 欢迎Star 2. 什么是OSS 全称为Object Storage Service,也叫对象存储服务,是一种解决...阅读全文

简书 2020-08-25 10:32:43 码农小胖哥

go 网络编程

客户端网络访问 package main import ( "fmt" "io/ioutil" "net/http" ) func main() { testHttpNewRequest() } func testHttpNewRequest() { // 1.创建一个客户端 client := http.Client{} // 2.创建一个请求,请求方式既可以是GET, 也可以是POST request, err := http.NewRequest("GET", "https://www.t...阅读全文

简书 2020-08-25 10:32:41 如逆水行舟不进则退

Go微服务架构系列--gin框架(上)

hi,大家好,小弟飞狐。这次带来的是Golang微服务系列。Deno从零到架构级系列文章里就提到过微服务。最近一次项目重构中,采用了go-micro微服务架构。又恰逢deno1.0正式版推出,于是乎node业务层也用deno重写。把Java的业务模块也全部用go重构了。Go-micro重构Java业务重构业务的时候,我们用go-micro来做微服务,全面的替代了Java栈。比如:服务注册发现用到了etcd通信用到了grpc框架集成了gin订单、支付等等都作为单独的服务。而deno之上都归前端来处...阅读全文

Segmentfault 2020-09-01 09:32:33 飞狐

int切片和string切片为什么不能转为interface类型的切片

在给可变参数传参时, 笔者经常会犯一些低级错误。如: cannot use (type []string) as type []interface {}和cannot use (type []int) as type []interface {}等。所以, 特地写下这篇文章用来时时刻刻地提醒自己。 Q1: 可以将[]T转为[]interface{}类型嘛? 答:不能直接转,Go语言规范不允许这样做,因为两种类型在内存中没有相同的表现形式。有必要将元素单独复制到目标切片。下面的例子将一个[]int...阅读全文

简书 2020-08-25 09:32:40 新世界杂货铺

关于Golang的那些事(一) -- Node.js和Golang对比

之前一直用Node.js作为开发语言,用了差不多4年的Node.js,涉及前端和后端,最近看到Golang这个新兴之秀挺火的,于是想探究探究一下这门语言,对比了一下他们的Github repo,截止现在Node.js的repo有72.5K星, issue数量是859个,Golang的repo有75.7K星,issue数量是5K+个。从趋势来看,Golang来势汹汹,但是问题较多,需要一段时间才能更加稳定。到官网看了一下Golang的简单使用方法,毫无疑问,都是从hello world开始的,编写...阅读全文

简书 2020-08-25 03:32:41 llkevin13579

2020-8-24 晚上面试

这次面试过程感觉思维有点发散,面着面着感觉聊起了天。。 自我介绍。 问起了一些我们公司的微服务的一些细节。 刚刚说到你们的微服务都是有来有回的情况嘛,要是传输的是大文件呢? 如果给我实现的话应该会在本地上传到我们的文件系统,然后用地址进行传递吧。。 你们公司用的什么文件系统。 当时记不得了,是F开头的,查了一下,是FastDFS。 分布式系统的CAP知道吗? 知道,最多只能满足两个的那种。(其实当时没想起来是哪三个,回想了一下容错性,一致性,可用性) mysql的主从结构牺牲了哪一种特性? 可以...阅读全文

简书 2020-08-25 00:32:40 yellowone

平衡二叉树-树的旋

树结构 树 树结构是由一个父节点以及若干个子节点,然后子节点又是其他子节点的父节点,由此而形成的一种结构即是树。其中节点的子节点的子节点叫做该节点的孙节点。如下所示: 二叉树(Binary Tree, BT) 二叉树是树结构的应用形式之一,二叉树每个节点至多有两个子节点,如上面第三个树结构所示,位于左边的子节点叫做左孩子或者左子节点,位于右边的叫做右孩子或者右子节点。 二叉搜索(查找)树(Binary Search Tree, BST) 二叉搜索树是二叉树的应用之一,在一棵二叉搜索树中,父节点的...阅读全文

简书 2020-08-24 21:32:44 心中的日月_pyihe

linux系统下poll和epoll内核源代码剖析

poll和epoll的使用应该不用再多说了。当fd很多时,使用epoll比poll效率更高。我们通过内核源码分析来看看到底是为什么。poll剖析poll系统调用:intpoll(struct pollfd *fds,nfds_tnfds,inttimeout);对应的实现代码为:[fs/select.c -->sys_poll]asmlinkagelongsys_poll(struct pollfd __user * ufds,unsignedintnfds,longtimeout){struc...阅读全文

简书 2020-08-24 18:32:43 linux大本营

大概是全网介绍监控最全面的文章了

那么一个应用体系是怎么样的呢?用户通过在PC或智能终端(手机)通过浏览器或APP对应用发起请求,请求通过网络传输到业务系统,业务系统的函数通过应用框架、中间件运行起来,运行系统又依托于操作系统,操作系统需要网络设备如网卡等与外界建立通讯,而这全套软件都是安装在硬件之上,如服务器、网卡等硬件设备都是安装在机房中。因此对一个应用体系的全栈监控就包含APP监控、浏览器监控、服务器监控、网络监控、日志监控、基础设施监控、物理环境监控。APP监控目前APP的主流操作系统有Android、IOS,因此每个A...阅读全文

简书 2020-08-24 18:32:41 AI课工场

[Golang实现JVM第六篇]实现Native方法

首先需要明确几个问题。 没有Native方法JVM什么也做不了 可能很多人认为native方法是Java里的禁区,使用本地方法会牺牲可移植性,而且还会有额外开销,貌似几乎没有程序员会在实际项目中写本地方法,这玩意就是个很冷门的东西。其实这种看法是错误的,哪怕一个Hello Word程序都是要严重依赖于本地方法的。在JDK中,你会发现任何涉及到I/O、线程操作的类,层层追踪源码后最终都能找到一个对应的native调用,真正把Hello World打印到控制台的正是这些native方法。而用于启动线...阅读全文

简书 2020-08-24 17:32:41 司青玄

golang面试题四

1.go struct能不能比较? 当结构体内含有不可比较的类型(Slice, Map, 和Function)时,不可以比较,反之可以比较。 sm1 := struct { age int m map[string]string }{age: 11, m: map[string]string{"a": "1"}} sm2 := struct { age int m map[string]string }{age: 11, m: map[string]string{"a": "1"}} //结构体...阅读全文

简书 2020-08-24 17:32:41 stevenyeahnet