Hi, 使用多年的go pprof检查内存泄漏的方法居然是错的?! | 鸟窝



Hi, 使用多年的go pprof检查内存泄漏的方法居然是错的?! | 鸟窝

最近在做一个 Redis 的 Proxy 的项目,其中利用Redis 6.0 新加的 tracking 功能实现客户端缓存的功能,可以为某些特定的redis使用场景提高吞吐和延迟。

当然,cache的实现也是有代价的。首先,cache的大小不能无限制的大,否则总有一点会把内存撑爆的;其次,cache的淘汰算法有多种方式,LRU、LFU等等,具体可以参考Cache replacement policies,不同的场景下各种淘汰算法的效果是不一样的;第三,对于大并发情况实现cache是有代价的,因为并发情况下对cache的访问需要加锁,而加锁就意味着有性能的损失。

我在实现这个cache的过程中稍微偷了一下懒, 想尽量的减少锁的scope,结果导致内存泄漏的问题。本来cache占用的最大内存我设置为10GB, 结果过了个周末发现程序已经占用了80GB的内存了。

当然本文不是要介绍这个项目的内存泄漏原因,而是介绍一下Go pprof工具查找内存泄漏的一个不太常用的方法。

检查Go程序内存的使用情况最常用的就是Go标准库自带的pprof库了,可以通过http暴露出这个profile, 然后通过go tool pprof或者pprof工具命令行/web方式查看。


Read full article from Hi, 使用多年的go pprof检查内存泄漏的方法居然是错的?! | 鸟窝


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts