如何在 Go 中使用 CGroup 实现进程内存控制

背景 从 Linux 内核 2.6.25 开始,CGroup 支持对进程内存的隔离和限制,这也是 Docker 等容器技术的底层支撑。 使用 CGroup 有如下好处: 在共享的机器上,进程相互隔离,互不影响,对其它进程是种保护。对于存在内存泄漏的进程,可以设置内存限制,通过系统 OOM 触发的 Kill 信号量来实现重启。CGroup 快速入门默认挂载分组 Linux 系统默认支持 CGroup, 而且默认挂载所有选项,可以使用 mount -t cgroup 来查看: $ mount -t ...阅读全文

阅读:3216 评论:0

Go 实现百万 WebSocket 连接

![](https://raw.githubusercontent.com/studygolang/gctt-images/master/a-million-websocket-and-go/image_1.jpeg) 大家好!我是 Sergey Kamardin,是 Mail.Ru 的一名工程师。 本文主要介绍如何使用 Go 开发高负载的 WebSocket 服务。 如果你熟悉 WebSockets,但对 Go 了解不多,仍希望你对这篇文章的想法和性能优化方面感兴趣。 ...阅读全文

2019-08-05 23:44:27 watermelo
阅读:4643 评论:0

从源码讲解 golang 内存分配

## 引言 golang 是谷歌2009年发布的开源编程语言,截止目前go的release版本已经到了1.12,Golang 语言专门针对多处理器系统应用程序的编程进行了优化,使用 Golang 编译的程序可以媲美 C /C++代码的速度,而且更加安全、支持并行进程。和其他“高级语言”一样,golang同样有一套自己的内存管理机制,自主的去完成内存分配、垃圾回收、内存管理等过程,从而避免频繁的向操作系统申请、释放内存,有效的提升go语言的处理性能。由于篇幅有限,本文重点针对golang1....阅读全文

2019-08-11 01:00:24 polaris
阅读:4034 评论:3

理解 Go 标准库中的 atomic.Value 类型

作者:喵叔 原文:blog.betacat.io/post/golang… 在 Go 语言标准库中,sync/atomic包将底层硬件提供的原子操作封装成了 Go 的函数。但这些操作只支持几种基本数据类型,因此为了扩大原子操作的适用范围,Go 语言在 1.4 版本的时候向sync/atomic包中添加了一个新的类型Value。此类型的值相当于一个容器,可以被用来“原子地"存储(Store)和加载(Load)任意类型的值。 历史起源 我在golang-dev邮件列表中翻到了14年的这段讨论,有用户...阅读全文

阅读:8251 评论:2

雪花算法 Snowflake & Sonyflake

唯一ID算法Snowflake相信大家都不墨生,他是Twitter公司提出来的算法。非常广泛的应用在各种业务系统里。也因为Snowflake的灵活性和缺点,对他的改造层出不穷,比百度的UidGenerator、美团的Leaf、索尼的Sonyflake等等。这篇帖子主要是讲一下原生的Snowflake算法、缺点及改造方案,并分析索尼的Sonyflake源码对原生Snowflake的改造, 原生Snowflake 原生Snowflake算法使用一个64 bit的整型数据,根据当前的时间来生成ID。 ...阅读全文

阅读:1923 评论:0

从源代码角度看epoll在Go中的使用(一)

Go提供了功能完备的标准网络库:net包,net包的实现相当之全面,httptcpudp均有实现且对用户提供了简单友好的使用接口。在Linux系统上Go使用了epoll来实现net包的核心部分,本文从用户接口层入手,分析Go在Linux平台上的epoll使用,文中若有不当之处请指出。 对于服务端程序而言,主要流程是Listen->Accept->Send/Write,客户端主要流程Connect->Send/Write,本文以这两个流程深入分析net包在Go中是如何实现的。 Listen 监听方...阅读全文

2020-02-27 08:32:33 shaoyuan1943
阅读:589 评论:0

go为什么这么快?(再探GMP模型)

进程、线程、协程 进程:进程是系统进行资源分配的基本单位,有独立的内存空间,单切换代价极高,进程间通信也比较麻烦 线程:线程是CPU调度和分派的基本单位,线程依附于进程,与其他线程共享进程的资源,仅有自己的(程序计数器,一组寄存器的值,和栈),线程切换代价小(但是线程之间的切换可能会设计用户态和内核态的切换),由于共享进程资源,所以线程之间通信比较方便。 协程:协程是一种用户态的轻量级线程,协程的调度完全由用户控制,协程切换只需要保存和恢复任务的上下文,没有内核的开销。协程间通信也比较简单(协程...阅读全文

2020-04-12 19:32:48 GGBond_8488
阅读:4863 评论:0

Go:异步抢占

![Illustration created for “A Journey With Go”, made from the original Go Gopher, created by Renee French](https://raw.githubusercontent.com/studygolang/gctt-images2/master/20200501-Go-Asynchronous-Preemption/00.png) ℹ️ 本文基于 Go 1.14。 抢占是调度器的重要部...阅读全文

2020-05-05 20:38:44 lxbwolf
阅读:1464 评论:2

2020计专后台服务器开发方向应届生月薪深度分析盘点

2020秋招在即,今天的互联网行业应届生薪资情况如何?今天和大家一起聊聊~一、如何在北上广深杭拿到15K!1.算法题,各大公司笔试面试基本都考这个,别的不说,《剑指offer》所有题目背下来,leetcode刷个四五百题起码的吧。搞过ACM也可以,反正刷个四五百题是必须的。我也觉得考这些算法题很无语,但是大家都这么考,你不准备,那不挂你挂谁?2.数据结构,不说要彻底给面试官手推各种数据结构的均摊复杂度,也不要求你手写红黑树,至少AVL 哈希表堆这些简单的数据结构得自己实现过;链表、线性表必须熟悉...阅读全文

2020-05-25 23:32:52 面试题小能手
阅读:5793 评论:0

数据库大表优化全攻略!!

作者:低至一折起来源:juejin.im/post/5b7d52afe51d453885030b91当MySQL单表记录数过大时,增删改查性能都会急剧下降单表优化除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑、部署、运维的各种复杂度,一般以整型值为主的表在千万级以下,字符串为主的表在五百万以下是没有太大问题的。而事实上很多时候 MySQL 单表的性能依然有不少优化空间,甚至能正常支撑千万级以上的数据量。字段尽量使用 TINYINT、 SMALLINT、 MEDIUM_I...阅读全文

2020-05-26 17:36:29 逆风_c69c
阅读:720 评论:0

Nsq 原理分析(一)

Nsq 是用 go 语言开发的轻量级的分布式消息队列,适合小型项目使用、用来学习消息队列实现原理、学习 golang channel知识以及如何用 go 来写分布式,为什么说适合小型小型项目使用因为,nsq 如果没有能力进行二次开发的情况存在的问题还是很多的。 Nsq 模块介绍 nsqd:是一个进程监听了 http、tcp 两种协议,用来创建 topic、channel,分发消息给消费者,向 nsqlooup 注册自己的元数据信息(topic、channel、consumer),自己的服务信息,...阅读全文

2020-05-31 13:32:34 朱伟
阅读:427 评论:0

涂鸦智能分布式定时调度系统Sigmax设计与实践

1.导读 Sigmax是涂鸦智能中间件团队基于Golang开发的一款高性能,分布式的定时任务调度引擎。针对IoT领域特有的复杂多样的定时任务场景,Sigmax提供了一套统一,稳定,精准的定时调度平台,来协助公司内各业务线方便的实现定时场景。 目前Sigmax已经在公司内部稳定运行了1年时间,单集群的日任务调度、日均任务触发数达千万次。 2.背景 涂鸦智能作为全球领先的AI+IoT平台,连接着海量的智能设备,每天会有大量的用户控制自己的智能设备以实现一些智能化的场景,比如: 用户A,每天早上7点自...阅读全文

2020-05-31 22:32:37 涂鸦智能技术团队
阅读:893 评论:0

golang面试题:怎么避免内存逃逸?

image 问题 怎么避免内存逃逸? 怎么答 在runtime/stubs.go:133有个函数叫noescape。noescape可以在逃逸分析中隐藏一个指针。让这个指针在逃逸分析中不会被检测为逃逸。 // noescape hides a pointer from escape analysis. noescape is // the identity function but escape analysis doesn't think the // output depends on th...阅读全文

阅读:1015 评论:0

从零学习 Go 语言(16):理解 Go 语言中接口与多态

![](http://image.iswbm.com/20200607145423.png) 在线博客:http://golang.iswbm.com/ Github:https://github.com/iswbm/GolangCodingTime --- ## 0. 接口是什么? > 这一段摘自 Go语言中文网 在面向对象的领域里,接口一般这样定义:**接口定义一个对象的行为**。接口只指定了对象应该做什么,至于如何实现这个行为(即实现细节),则由...阅读全文

2020-06-16 08:38:36 hello_wbm
阅读:1197 评论:0

踩坑记#2:Go服务锁死

再挖个坟,讲讲去年踩的另一个坑。 前方低能 那是去年7月的一天,被透过落地玻璃的宇宙中心五道口的夕阳照着的正在工位搬砖的我,突然听到一阵骚乱,转头一看,收到夺命连环call的D同学反馈,流量严重异常。 点开报警群,一串异常赫然在目: [规则]:「流量波动过大(严重) 」[报警上下文]:change:-70.38%值班人:D(不是我)报警方式:电话&Lark报警URL:报警详情页 再点开报警详情页一看: 排爆 解释一下:在字节跳动,我们有一个基于OpenTSDB的metrics平台(时序数据库),...阅读全文

2020-06-30 15:32:36 felix021
阅读:2474 评论:0

Golang面试题:是否是平衡的二叉树

问题:给定一个二叉树,判断其是否是高度平衡的二叉树 高度平衡的二叉树定义:一颗二叉树,每一个节点的左右子树的高度差的绝对值不超过1。 示例 1: 给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7 返回 true 示例 2: 给定二叉树 [1,2,2,3,3,null,null,4,4] 1 / \ 2 2 / \ 3 3 / \ 4 4 返回 false 解题思路: 在理解题意以后,我们需要先分解下问题。首先要先获取节点高度,然后再再进行比对判断...阅读全文

阅读:515 评论:0

Golang跳表

相信大家都知道排行榜,在很多场景里都需要用到排行榜功能,尤其是游戏中!之前在了解排行榜实现机制的时候,在网上看得最多的答复便是使用redis的有序集合实现。于是深入了解了一下redis中的有序集合。 redis中的有序结合(sorted set)是一种线性结构,底层是用有序链表实现的,但是对链表增加的“索引”,并且对索引进行了分层,跳表每层散落的节点数不同,查找过程中通过索引向下层跳转,最终落到最下层的数据链中,这样做的目的是通过空间换时间来获取更高的效率,故称之为跳跃表(跳表)。 网上有很多关...阅读全文

2020-06-30 19:32:45 心中的日月_pyihe
阅读:512 评论:0

从简历被拒,到拿下头条面试,我花了一年的时间(经验分享+面试题)

我是二本院校非科班的,从简历被拒,到拿下头条面试,我花了一年的时间。 一、印象中的头条 二、面试背景 三、准备面试 四、头条一面电话面(Java+项目) 五、头条二面视频面(大数据+项目) 六、头条三面视频面(算法+场景题) 七、如何通过头条笔试? 八、如何准备头条面试? 九、一个关于如何进大厂的小建议 一、印象中的头条 1.老板张一鸣跟我是福建老乡,龙岩市在我朋友说来就是山沟沟,能走出美团王兴和头条张一鸣让我卯足了去龙岩吃特产老鼠干的欲望。 2.给的钱多,笔试也贼难。参加过头条笔试的同学都知道...阅读全文

2020-06-30 19:32:46 jett老师
阅读:5427 评论:0

Golang编程规范

image.png 统一规范篇 合理规划目录 本篇主要描述了公司内部同事都必须遵守的一些开发规矩,如统一开发空间,既使用统一的开发工具来保证代码最后的格式的统一,开发中对文件和代码长度的控制,必须经过go语言自带的检测机制等。 【原则1.1】合理规划目录,一个目录中只包含一个包(实现一个模块的功能),如果模块功能复杂考虑拆分子模块,或者拆分目录。 GOPATH设置 【建议1.2】使用单一的 GOPATH import 规范 【规则1.3.1】在非测试文件(*_test.go)中,禁止使用 . 来...阅读全文

2020-06-30 19:32:47 我就是小政政
阅读:571 评论:0