导语 | 现代高级编程语言管理内存的方式分自动和手动两种。手动管理内存的典型代表是C和C++,编写代码过程中需要主动申请或者释放内存;而Java和Go等语言使用自动的内存管理系统,由内存分配器和垃圾收集器来代为分配和回收内存,开发者只需关注业务代码而无需关注底层内存分配和回收,虽然语言帮我们处理了这部分,但是还是有必要去了解一下底层的架构设计和执行逻辑,这样可以更好的掌握一门语
前言go中的内存泄露一般都是goroutine泄露,就是goroutine没有被关闭,或者没有添加超时控制,让goroutine一只处于阻塞状态,不能被GC。场景暂时性内存泄露获取长字符串中的一段导致长字符串未释放获取长slice中的一段导致长slice未释放在长slice新建slice导致泄漏string相比于切片少了一个容量的cap字段,可以把string当成一个只读的切片类型。获取长stri
转载 2024-03-29 09:39:12
478阅读
1.有goroutine泄漏,goroutine“飞”了,zombie goroutine没有结束,这个时候在这个goroutine上分配的内存对象将一直被这个僵尸goroutine引用着,进而导致gc无法回收这类对象,内存泄漏。 2.有一些全局(或者生命周期和程序本身运行周期一样长的)的数据结构意外的挂住了本该释放的对象,虽然goroutine已经退出了,但是这些对象并没有从这类数据结构中删除,导致对象一直被引用,无法被回收...
原创 2021-06-01 12:21:57
675阅读
问题描述线上服务压测过后,部分机器的监控显示的rss内存使用率会一直增长,中间不会fullgc,直到内存分配不了,直接down机,进程被kill掉。当前环境jdk1.8.0_91g1垃圾回收器内存配置排查过程1.错误示范同样配置机器进行压测看能否复现场景,先按照上面的参数启动应用,使用top命令:再过两分钟后 使用top命令得到如下:可以看到res在应用启动后,短短时间内就增长了3个g,同时这时候
我们来聊聊GZIPOutputStream 和 GZIPInputStream, 如果不关闭流会引起的问题,以及GZIPStream申请和释放堆外内存的流程, Let's do it!引子在我的工程里面又一个工具类 ZipHelper 用来压缩和解压 String最近服务出现了占用swap空间的问题,初步定位为内存泄漏,最后通过分析定位到是 Native 方法Java_java_util_zip_
一、问题现象Bigpipe是Baidu公司内部的分布式传输系统,其服务器模块Broker采用异步编程框架来实现,并大量使用了引用计数来管理对象资源的生命周期和释放时机。在对Broker模块进行压力测试过程中,发现Broker长时间运行后,内存占用逐步变大,出现了内存泄漏问题。二、初步分析针对近期Broker的升级改造点,确定Broker中可能出现内存泄漏的对象。Broker新增了监控功能,其中一项
我们可以使用 go tool pprof在 Go 语言中,我们可以通过标准库的代码包 runtime 和 runtime/pprof 中的程序来生成三种包含实时性数据的概要文件,分别是 CPU 概要文件、内存概要文件 和 程序阻塞概要文件。下面我们先来分别介绍用于生成这三种概要文件的 API 的用法。CPU 概要文件在介绍 CPU 概要文件的生成方法之前,我们先来简单了解一下 CPU 主
一、查看Jvm运行状态的命令  监控jvm的GC情况:  jstat -gcutil pid 1000 100  查看jvm配置信息:    jmap -heap pid:可以看到java进程的堆的配置信息,各区的空间大小和配置信息  查看jvm中类和对象的占用情况:    jmap -histo 5279 | head -20:查看jvm中各个类的实例数、占用内存数量以及类的全名  堆文件dum
转载 2024-03-20 18:35:17
41阅读
这些示例展示了几种可能导致内存泄漏的常见情况。在实际编程中,应该特别注意资源的正确关闭、循环引用的处理和Goroutine的
原创 2023-11-14 12:23:46
157阅读
上一讲介绍了 JVM 内存区域的划分,总结了相关的一些概念,今天我将结合 JVM 参数、工具等方面,进一步分析 JVM 内存结构,包括外部资料相对较少的堆外部分。今天要问你的问题是,如何监控和诊断 JVM 堆内和堆外内存使用?典型回答了解 JVM 内存的方法有很多,具体能力范围也有区别,简单总结如下:可以使用综合性的图形化工具,如 JConsole、VisualVM(注意,从 Oracle JDK
背景:参考原始贴。简单就是一个随着业务量增长内存溢出逐渐明显的程序问题。技术栈: uwsgi + mysql + redis + python3心历路程:实际上并不顺利,当你尝试使用方法却没找到时,会各种对自己思想猜疑甚至对官方文档的猜疑,最后找到问题后当然发现实际上很简单。 然后找到结果后对结果的逐步反推解决,才最终确定各种疑问。 文章省去了大量杂碎排查步骤,其实排查过程中,python许多的内
转载 2023-11-25 13:02:11
268阅读
长期存活的 Goroutine:如果创建了大量的Goroutine,并且这些Goroutine一直保持运行状态而不退出,会导致这些Gor
原创 2023-11-14 14:01:12
157阅读
文章目录前言一、什么是负载均衡,负载均衡的策略有哪些?0.负载均衡之前先设置一下动态端口python篇golang篇1.集中式load balance2.进程内load balance3.独立进程load balance二、常用负载均衡策略1.轮询(Round Robin)法2.随机法3.源地址哈希法4.加权轮询(Weight Round Robin)法5.加权随机(Weight Random)
转载 2024-05-16 07:01:29
164阅读
gRPC入门gRPC是Google公司基于Protobuf开发的跨语言的开源RPC框架。gRPC基于HTTP/2协议设计,可以基于一个HTTP/2链接提供多个服务,对于移动设备更加友好。本节将讲述gRPC的简单用法。1 gRPC技术栈Go语言的gRPC技术栈图所示:最底层为TCP或Unix Socket协议,在此之上是HTTP/2协议的实现,然后在HTTP/2协议之上又构建了针对Go语言的gRPC
转载 2024-03-01 22:24:21
145阅读
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、Golang interface 是什么?二、为什么有 interface?1.编写泛型算法2.隐藏具体实现3.提供拦截点(providing interception points)4.多态(polymorphism)三、非入侵式四、类型断言总结参考 前言interface 是GO语言的基础特性之一。可以理解为一种
转载 2024-04-29 09:40:53
34阅读
gRPC是google开源高性能分布式RPC框架,支持http/2 双向数据流传输及Protobuff,可以在任何环境下运行。 它可以有效地将数据中心内和跨数据中心的服务与可插拔支持进行负载均衡,跟踪,运行状况检查和身份验证。 它也适用于分布式计算,将设备,移动应用程序和浏览器连接到后端服务。核心功能:10种语言的语言客户端库高效的线路和简单的服务定义框架基于http / 2传输的双向流式传输可插
转载 2024-06-14 11:12:38
199阅读
Remote Procedure Call (RPC) 是一种使用TCP协议从另一个系统调用应用程序功能执行的方法。Go有原生支持RPC服务器实现,本文通过简单实例介绍RPC的实现过程。gRPCgRPC远程过程调用框架是基于动作的模式,类似远程调用微服务。这使得gRPC成为一种围绕Protobufs构建的进程间通信(IPC)协议,用于处理客户端和服务器之间的消息传递。gRPC非常适合密集而高效的通
转载 2024-06-09 06:37:48
31阅读
hello/client 客户端package mainimport ( pb "go-study/micro-service/gRPC/src/proto/hello" // 引入proto包 "golang.org/x/net/context" "google.golang.org/grpc" "google.golang.org
原创 2022-07-18 21:14:32
718阅读
1. gRPC简述 gRPC 是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计。目前提供 C、Java 和 Go 语言版本,分别是:grpc, grpc-java, grpc-go. 其中 C 版本支持 C, C++, Node.js, Python, Ruby, Objec
转载 2020-02-29 18:19:00
294阅读
2评论
GF(Go Frame)是一款模块化、松耦合、轻量级、高性能的Go语言Web开发框架。支持热重启、热更新、多域名、多端口、多服务、HTTP/HTTPS、动态路由等特性 ,并提供了Web服务开发的系列核心组件,如:Router、Cookie、Session、服务注册、配置管理、模板引擎、数据校验、分页管理、数据库ORM等等等等, 并且提供了数十个实用开发模块集,如:缓存、日志、时间、命令行、二进制、
  • 1
  • 2
  • 3
  • 4
  • 5