狠狠撸

狠狠撸Share a Scribd company logo
JAVA 内存泄漏及其诊断
@ivannotes
2012-05-04
Agenda

?   什么是内存泄漏
?   一个真实的例子
?   诊断泄漏点
?   利用工具发现泄漏
?   参考资料
?   Q&A
什么是内存泄漏

? JAVA 存在内存泄漏
C 的例子:
int *pi; void foo() {
    pi = (int*) malloc(8*sizeof(int)); // oops, memory leak of 4 ints
    // use pi
    free(pi); // foo() is done with pi
    }
void main() {
    pi = (int*) malloc(4*sizeof(int));
    foo();
    pi[0] = 10; // oops, pi is now a dangling pointer
}
Java 的例子

import   java.io.IOException;
import   java.util.HashSet;
import   java.util.Random;
import   java.util.Vector;

public class LeakExample {
    static Vector myVector = new Vector();
    static HashSet pendingRequests = new HashSet();

    public void slowlyLeakingVector(int iter, int count) {
            for (int i=0; i<iter; i++) {
                         for (int n=0; n<count; n++) {
                                     myVector.add(Integer.toString(n+i));
                         }
                         for (int n=count-1; n>0; n--) {
                                     // Oops, it should be n>=0
                                     myVector.removeElementAt(n);
                         }
            }
    }
Java 的例子

public void leakingRequestLog(int iter) {
            Random requestQueue = new Random();
            for (int i=0; i<iter; i++) {
                         int newRequest = requestQueue.nextInt();
                         pendingRequests.add(new Integer(newRequest));
                         // processed request, but forgot to remove it
                         // from pending requests
            }
    }

    public void noLeak(int size) {
            HashSet tmpStore = new HashSet();
            for (int i=0; i<size; ++i) {
                         String leakingUnit = new String("Object: " + i);
                         tmpStore.add(leakingUnit);
            }
            // Though highest memory allocation happens in this
            // function, but all these objects get garbage
            // collected at the end of this method, so no leak.
    }
Java 的例子

    public static void main(String[] args) throws IOException {
            LeakExample javaLeaks = new LeakExample();
            for (int i=0; true; i++) {
                         try { // sleep to slow down leaking process
                                      Thread.sleep(1000);
                         } catch (InterruptedException e) { /* do nothing */ }
                         System.out.println("Iteration: " + i);
                         javaLeaks.slowlyLeakingVector(1000,10);
                         javaLeaks.leakingRequestLog(5000);
                         javaLeaks.noLeak(100000);
            }
    }
}
什么是内存泄漏

对于 JAVA 来说一个对象被程序使用过后在程序接
下来的生命周期内都不会再使用,那它就是内存
泄漏。因为它已经不会再被用到,但却占用了内
存并且不能被回收。
一个真实的例子

背景:
 该死的 JVM GC 报警短信
诊断泄漏点

?   问题代码

String name = request.getServletPath();
ProfilerPoint profiler = profilerManager.getProfilerPoint(name,domain);

public ProfilerPoint getProfilerPoint(String name,String domain){
     ProfilerPoint point = points.get(name);
     if(point==null){
           point = new ProfilerPoint(name,domain);
           ProfilerPoint old = points.putIfAbsent(name, point);
           if(old!=null)return old;
     }
     return point;
}

    永远只会变大的 points 。因为我们采用了 REST 风格的 URL 所以随着内容的增
    多 URL 的数量会越来越多,这里的统计不应该根据 URL 去统计,个应该根据正
    则的 URL 映射表去统计
利用工具发现泄漏


? 这次的问题中我们用到的工具
jmap
jstat
gc.log
jvisualvm

Other Tools can be used
GCLogViewer
IBM Monitoring and Diagnostic Tools for Java
利用工具发现泄漏


? gc log
  开启 GC log 的方法。在 JVM 中添加如下参数
  -verbose:gc
  -XX:+PrintGCDetails
  -XX:+PrintGCTimeStamps
  -Xloggc:somefile.log
? Jstat
  jstat –gc pid
  jstat –gcutil pid 1000 10
  其中 pid 是 jvm 进程号, jstat –gcutil 1000 是代表每隔 1
  秒执行一次, 10 代表一共执行 10 次
利用工具发现泄漏


?   Jmap
    jmap –histo:live pid
    执行该命令可以打印出当前堆中活着的对象,我们来看看出问题的时候这里
    是什么样子的
利用工具发现泄漏



? Jvisualvm
参考资料

? http://www.ibm.com/developerworks/rational/library

? http://
  www.ibm.com/developerworks/java/jdk/tools/gcmv
  /
? http://www.ibm.com/developerworks/java/jdk/tools/
Q&A

More Related Content

What's hot (20)

冲浪 Object-c
冲浪 Object-c冲浪 Object-c
冲浪 Object-c
jeff kit
?
Ecma script3
Ecma script3 Ecma script3
Ecma script3
gniavaj
?
异步编程与浏览器执行模型
异步编程与浏览器执行模型异步编程与浏览器执行模型
异步编程与浏览器执行模型
keelii
?
奥颈苍诲.箩蝉无障碍调试与排错
奥颈苍诲.箩蝉无障碍调试与排错奥颈苍诲.箩蝉无障碍调试与排错
奥颈苍诲.箩蝉无障碍调试与排错
jeffz
?
OpenEJB - 另一個選擇
OpenEJB - 另一個選擇OpenEJB - 另一個選擇
OpenEJB - 另一個選擇
Justin Lin
?
论 Python 与设计模式。
论 Python 与设计模式。论 Python 与设计模式。
论 Python 与设计模式。
勇浩 赖
?
颈笔丑辞苍别,颈辞蝉,翱产箩别肠迟-颁基础入门
颈笔丑辞苍别,颈辞蝉,翱产箩别肠迟-颁基础入门颈笔丑辞苍别,颈辞蝉,翱产箩别肠迟-颁基础入门
颈笔丑辞苍别,颈辞蝉,翱产箩别肠迟-颁基础入门
Lucien Li
?
JavaScript 教程
JavaScript 教程JavaScript 教程
JavaScript 教程
Bobby Zhou
?
從 Singleton 談 constructor
從 Singleton 談 constructor從 Singleton 談 constructor
從 Singleton 談 constructor
Luba Tang
?
《Java程序设计》期末考试试题 (六)
《Java程序设计》期末考试试题 (六)《Java程序设计》期末考试试题 (六)
《Java程序设计》期末考试试题 (六)
jane2006
?
颈辞蝉分享
颈辞蝉分享颈辞蝉分享
颈辞蝉分享
Lucien Li
?
页游开发中的 Python 组件与模式
页游开发中的 Python 组件与模式页游开发中的 Python 组件与模式
页游开发中的 Python 组件与模式
勇浩 赖
?
闯蝉肠别虫:案例、阻碍、体会、展望
闯蝉肠别虫:案例、阻碍、体会、展望闯蝉肠别虫:案例、阻碍、体会、展望
闯蝉肠别虫:案例、阻碍、体会、展望
jeffz
?
闯蝉肠别虫:案例、经验、阻碍、展望
闯蝉肠别虫:案例、经验、阻碍、展望闯蝉肠别虫:案例、经验、阻碍、展望
闯蝉肠别虫:案例、经验、阻碍、展望
jeffz
?
第01章 绪论(java版)
第01章  绪论(java版)第01章  绪论(java版)
第01章 绪论(java版)
Yan Li
?
Inside.java.concurrency 35.thread pool.part8_future.scheduledthreadpoolexecutor
Inside.java.concurrency 35.thread pool.part8_future.scheduledthreadpoolexecutorInside.java.concurrency 35.thread pool.part8_future.scheduledthreadpoolexecutor
Inside.java.concurrency 35.thread pool.part8_future.scheduledthreadpoolexecutor
Ady Liu
?
Closure
ClosureClosure
Closure
Ji-Kang Huang
?
Lua 语言介绍
Lua 语言介绍Lua 语言介绍
Lua 语言介绍
gowell
?
JavaScript 快速複習 2017Q1
JavaScript 快速複習 2017Q1JavaScript 快速複習 2017Q1
JavaScript 快速複習 2017Q1
Sheng-Han Su
?
冲浪 Object-c
冲浪 Object-c冲浪 Object-c
冲浪 Object-c
jeff kit
?
Ecma script3
Ecma script3 Ecma script3
Ecma script3
gniavaj
?
异步编程与浏览器执行模型
异步编程与浏览器执行模型异步编程与浏览器执行模型
异步编程与浏览器执行模型
keelii
?
奥颈苍诲.箩蝉无障碍调试与排错
奥颈苍诲.箩蝉无障碍调试与排错奥颈苍诲.箩蝉无障碍调试与排错
奥颈苍诲.箩蝉无障碍调试与排错
jeffz
?
OpenEJB - 另一個選擇
OpenEJB - 另一個選擇OpenEJB - 另一個選擇
OpenEJB - 另一個選擇
Justin Lin
?
论 Python 与设计模式。
论 Python 与设计模式。论 Python 与设计模式。
论 Python 与设计模式。
勇浩 赖
?
颈笔丑辞苍别,颈辞蝉,翱产箩别肠迟-颁基础入门
颈笔丑辞苍别,颈辞蝉,翱产箩别肠迟-颁基础入门颈笔丑辞苍别,颈辞蝉,翱产箩别肠迟-颁基础入门
颈笔丑辞苍别,颈辞蝉,翱产箩别肠迟-颁基础入门
Lucien Li
?
JavaScript 教程
JavaScript 教程JavaScript 教程
JavaScript 教程
Bobby Zhou
?
從 Singleton 談 constructor
從 Singleton 談 constructor從 Singleton 談 constructor
從 Singleton 談 constructor
Luba Tang
?
《Java程序设计》期末考试试题 (六)
《Java程序设计》期末考试试题 (六)《Java程序设计》期末考试试题 (六)
《Java程序设计》期末考试试题 (六)
jane2006
?
颈辞蝉分享
颈辞蝉分享颈辞蝉分享
颈辞蝉分享
Lucien Li
?
页游开发中的 Python 组件与模式
页游开发中的 Python 组件与模式页游开发中的 Python 组件与模式
页游开发中的 Python 组件与模式
勇浩 赖
?
闯蝉肠别虫:案例、阻碍、体会、展望
闯蝉肠别虫:案例、阻碍、体会、展望闯蝉肠别虫:案例、阻碍、体会、展望
闯蝉肠别虫:案例、阻碍、体会、展望
jeffz
?
闯蝉肠别虫:案例、经验、阻碍、展望
闯蝉肠别虫:案例、经验、阻碍、展望闯蝉肠别虫:案例、经验、阻碍、展望
闯蝉肠别虫:案例、经验、阻碍、展望
jeffz
?
第01章 绪论(java版)
第01章  绪论(java版)第01章  绪论(java版)
第01章 绪论(java版)
Yan Li
?
Inside.java.concurrency 35.thread pool.part8_future.scheduledthreadpoolexecutor
Inside.java.concurrency 35.thread pool.part8_future.scheduledthreadpoolexecutorInside.java.concurrency 35.thread pool.part8_future.scheduledthreadpoolexecutor
Inside.java.concurrency 35.thread pool.part8_future.scheduledthreadpoolexecutor
Ady Liu
?
Lua 语言介绍
Lua 语言介绍Lua 语言介绍
Lua 语言介绍
gowell
?
JavaScript 快速複習 2017Q1
JavaScript 快速複習 2017Q1JavaScript 快速複習 2017Q1
JavaScript 快速複習 2017Q1
Sheng-Han Su
?

Viewers also liked (20)

闯补惫补性能调优浅谈
闯补惫补性能调优浅谈闯补惫补性能调优浅谈
闯补惫补性能调优浅谈
jxqlovejava
?
Java Garbage Collection(GC)- Study
Java Garbage Collection(GC)- StudyJava Garbage Collection(GC)- Study
Java Garbage Collection(GC)- Study
Dhanu Gupta
?
闯补惫补线上应用问题排查方法和工具(空望)
闯补惫补线上应用问题排查方法和工具(空望)闯补惫补线上应用问题排查方法和工具(空望)
闯补惫补线上应用问题排查方法和工具(空望)
ykdsg
?
Java 性能瓶劲分析之最佳实践
Java 性能瓶劲分析之最佳实践Java 性能瓶劲分析之最佳实践
Java 性能瓶劲分析之最佳实践
Denger Tung
?
服务器端性能优化
服务器端性能优化服务器端性能优化
服务器端性能优化
ZhiYong Wei
?
闯补惫补常见问题排查
闯补惫补常见问题排查闯补惫补常见问题排查
闯补惫补常见问题排查
bluedavy lin
?
闯痴惭及其调优
闯痴惭及其调优闯痴惭及其调优
闯痴惭及其调优
zhongbing liu
?
Java gc
Java gcJava gc
Java gc
Niit
?
[BGOUG] Java GC - Friend or Foe
[BGOUG] Java GC - Friend or Foe[BGOUG] Java GC - Friend or Foe
[BGOUG] Java GC - Friend or Foe
SAP HANA Cloud Platform
?
Java GC Tuning
Java GC TuningJava GC Tuning
Java GC Tuning
pprun
?
罢丑谤颈蹿迟+蝉肠谤颈产别实现分布式日志收集,并与濒辞驳4箩集成
罢丑谤颈蹿迟+蝉肠谤颈产别实现分布式日志收集,并与濒辞驳4箩集成罢丑谤颈蹿迟+蝉肠谤颈产别实现分布式日志收集,并与濒辞驳4箩集成
罢丑谤颈蹿迟+蝉肠谤颈产别实现分布式日志收集,并与濒辞驳4箩集成
zhongbing liu
?
How long can you afford to Stop The World?
How long can you afford to Stop The World?How long can you afford to Stop The World?
How long can you afford to Stop The World?
Java Usergroup Berlin-Brandenburg
?
What you need to know about GC
What you need to know about GCWhat you need to know about GC
What you need to know about GC
Kelum Senanayake
?
GC Tuning in the HotSpot Java VM - a FISL 10 Presentation
GC Tuning in the HotSpot Java VM - a FISL 10 PresentationGC Tuning in the HotSpot Java VM - a FISL 10 Presentation
GC Tuning in the HotSpot Java VM - a FISL 10 Presentation
Ludovic Poitou
?
Java GC
Java GCJava GC
Java GC
Ray Cheng
?
Вячеслав Блинов ?Java Garbage Collection: A Performance Impact?
Вячеслав Блинов ?Java Garbage Collection: A Performance Impact?Вячеслав Блинов ?Java Garbage Collection: A Performance Impact?
Вячеслав Блинов ?Java Garbage Collection: A Performance Impact?
Anna Shymchenko
?
JDK Tools For Performance Diagnostics
JDK Tools For Performance DiagnosticsJDK Tools For Performance Diagnostics
JDK Tools For Performance Diagnostics
Baruch Sadogursky
?
20th.陈晓鸣 百度海量日志分析架构及处理经验分享
20th.陈晓鸣 百度海量日志分析架构及处理经验分享20th.陈晓鸣 百度海量日志分析架构及处理经验分享
20th.陈晓鸣 百度海量日志分析架构及处理经验分享
elevenma
?
用 Python 打造你自己的 summly
用 Python 打造你自己的 summly用 Python 打造你自己的 summly
用 Python 打造你自己的 summly
Andy Dai
?
Java gc and JVM optimization
Java gc  and JVM optimizationJava gc  and JVM optimization
Java gc and JVM optimization
Rajan Jethva
?
闯补惫补性能调优浅谈
闯补惫补性能调优浅谈闯补惫补性能调优浅谈
闯补惫补性能调优浅谈
jxqlovejava
?
Java Garbage Collection(GC)- Study
Java Garbage Collection(GC)- StudyJava Garbage Collection(GC)- Study
Java Garbage Collection(GC)- Study
Dhanu Gupta
?
闯补惫补线上应用问题排查方法和工具(空望)
闯补惫补线上应用问题排查方法和工具(空望)闯补惫补线上应用问题排查方法和工具(空望)
闯补惫补线上应用问题排查方法和工具(空望)
ykdsg
?
Java 性能瓶劲分析之最佳实践
Java 性能瓶劲分析之最佳实践Java 性能瓶劲分析之最佳实践
Java 性能瓶劲分析之最佳实践
Denger Tung
?
服务器端性能优化
服务器端性能优化服务器端性能优化
服务器端性能优化
ZhiYong Wei
?
闯补惫补常见问题排查
闯补惫补常见问题排查闯补惫补常见问题排查
闯补惫补常见问题排查
bluedavy lin
?
Java gc
Java gcJava gc
Java gc
Niit
?
Java GC Tuning
Java GC TuningJava GC Tuning
Java GC Tuning
pprun
?
罢丑谤颈蹿迟+蝉肠谤颈产别实现分布式日志收集,并与濒辞驳4箩集成
罢丑谤颈蹿迟+蝉肠谤颈产别实现分布式日志收集,并与濒辞驳4箩集成罢丑谤颈蹿迟+蝉肠谤颈产别实现分布式日志收集,并与濒辞驳4箩集成
罢丑谤颈蹿迟+蝉肠谤颈产别实现分布式日志收集,并与濒辞驳4箩集成
zhongbing liu
?
What you need to know about GC
What you need to know about GCWhat you need to know about GC
What you need to know about GC
Kelum Senanayake
?
GC Tuning in the HotSpot Java VM - a FISL 10 Presentation
GC Tuning in the HotSpot Java VM - a FISL 10 PresentationGC Tuning in the HotSpot Java VM - a FISL 10 Presentation
GC Tuning in the HotSpot Java VM - a FISL 10 Presentation
Ludovic Poitou
?
Вячеслав Блинов ?Java Garbage Collection: A Performance Impact?
Вячеслав Блинов ?Java Garbage Collection: A Performance Impact?Вячеслав Блинов ?Java Garbage Collection: A Performance Impact?
Вячеслав Блинов ?Java Garbage Collection: A Performance Impact?
Anna Shymchenko
?
JDK Tools For Performance Diagnostics
JDK Tools For Performance DiagnosticsJDK Tools For Performance Diagnostics
JDK Tools For Performance Diagnostics
Baruch Sadogursky
?
20th.陈晓鸣 百度海量日志分析架构及处理经验分享
20th.陈晓鸣 百度海量日志分析架构及处理经验分享20th.陈晓鸣 百度海量日志分析架构及处理经验分享
20th.陈晓鸣 百度海量日志分析架构及处理经验分享
elevenma
?
用 Python 打造你自己的 summly
用 Python 打造你自己的 summly用 Python 打造你自己的 summly
用 Python 打造你自己的 summly
Andy Dai
?
Java gc and JVM optimization
Java gc  and JVM optimizationJava gc  and JVM optimization
Java gc and JVM optimization
Rajan Jethva
?

Similar to 闯础痴础内存泄漏及诊断 (20)

贰箩产工作原理学习笔记
贰箩产工作原理学习笔记贰箩产工作原理学习笔记
贰箩产工作原理学习笔记
yiditushe
?
Keep your code clean
Keep your code cleanKeep your code clean
Keep your code clean
macrochen
?
11, exceptions
11, exceptions11, exceptions
11, exceptions
ted-xu
?
闯补惫补蝉肠谤颈辫迟之昨是今非
闯补惫补蝉肠谤颈辫迟之昨是今非闯补惫补蝉肠谤颈辫迟之昨是今非
闯补惫补蝉肠谤颈辫迟之昨是今非
Tony Deng
?
Net Parallel Programming .NET平行處理與執行序
Net Parallel Programming .NET平行處理與執行序Net Parallel Programming .NET平行處理與執行序
Net Parallel Programming .NET平行處理與執行序
HO-HSUN LIN
?
學好 node.js 不可不知的事
學好 node.js 不可不知的事學好 node.js 不可不知的事
學好 node.js 不可不知的事
Ben Lue
?
PHPUnit + Xdebug 单元测试技术
PHPUnit + Xdebug 单元测试技术PHPUnit + Xdebug 单元测试技术
PHPUnit + Xdebug 单元测试技术
hoopchina
?
潜力无限的编程语言闯补惫补蝉肠谤颈辫迟
潜力无限的编程语言闯补惫补蝉肠谤颈辫迟潜力无限的编程语言闯补惫补蝉肠谤颈辫迟
潜力无限的编程语言闯补惫补蝉肠谤颈辫迟
jay li
?
详解础厂3的内存管理机制,有效释放贵尝础厂贬内存,减少资源占用
详解础厂3的内存管理机制,有效释放贵尝础厂贬内存,减少资源占用详解础厂3的内存管理机制,有效释放贵尝础厂贬内存,减少资源占用
详解础厂3的内存管理机制,有效释放贵尝础厂贬内存,减少资源占用
贵尝础厂贬开发者交流会
?
闯2别别面试知识
闯2别别面试知识闯2别别面试知识
闯2别别面试知识
yiditushe
?
Java script closures
Java script closuresJava script closures
Java script closures
skywalker1114
?
用闯辩耻别谤测实现拖拽层
用闯辩耻别谤测实现拖拽层用闯辩耻别谤测实现拖拽层
用闯辩耻别谤测实现拖拽层
yiditushe
?
前端测试
前端测试前端测试
前端测试
frontwindysky
?
前端测试
前端测试前端测试
前端测试
Zheng Biao
?
Java Script 引擎技术
Java Script 引擎技术Java Script 引擎技术
Java Script 引擎技术
bigqiang zou
?
千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7
javatwo2011
?
Swift 程序语言介绍
Swift 程序语言介绍Swift 程序语言介绍
Swift 程序语言介绍
明 李
?
贰箩产工作原理学习笔记
贰箩产工作原理学习笔记贰箩产工作原理学习笔记
贰箩产工作原理学习笔记
yiditushe
?
Keep your code clean
Keep your code cleanKeep your code clean
Keep your code clean
macrochen
?
11, exceptions
11, exceptions11, exceptions
11, exceptions
ted-xu
?
闯补惫补蝉肠谤颈辫迟之昨是今非
闯补惫补蝉肠谤颈辫迟之昨是今非闯补惫补蝉肠谤颈辫迟之昨是今非
闯补惫补蝉肠谤颈辫迟之昨是今非
Tony Deng
?
Net Parallel Programming .NET平行處理與執行序
Net Parallel Programming .NET平行處理與執行序Net Parallel Programming .NET平行處理與執行序
Net Parallel Programming .NET平行處理與執行序
HO-HSUN LIN
?
學好 node.js 不可不知的事
學好 node.js 不可不知的事學好 node.js 不可不知的事
學好 node.js 不可不知的事
Ben Lue
?
PHPUnit + Xdebug 单元测试技术
PHPUnit + Xdebug 单元测试技术PHPUnit + Xdebug 单元测试技术
PHPUnit + Xdebug 单元测试技术
hoopchina
?
潜力无限的编程语言闯补惫补蝉肠谤颈辫迟
潜力无限的编程语言闯补惫补蝉肠谤颈辫迟潜力无限的编程语言闯补惫补蝉肠谤颈辫迟
潜力无限的编程语言闯补惫补蝉肠谤颈辫迟
jay li
?
详解础厂3的内存管理机制,有效释放贵尝础厂贬内存,减少资源占用
详解础厂3的内存管理机制,有效释放贵尝础厂贬内存,减少资源占用详解础厂3的内存管理机制,有效释放贵尝础厂贬内存,减少资源占用
详解础厂3的内存管理机制,有效释放贵尝础厂贬内存,减少资源占用
贵尝础厂贬开发者交流会
?
闯2别别面试知识
闯2别别面试知识闯2别别面试知识
闯2别别面试知识
yiditushe
?
用闯辩耻别谤测实现拖拽层
用闯辩耻别谤测实现拖拽层用闯辩耻别谤测实现拖拽层
用闯辩耻别谤测实现拖拽层
yiditushe
?
Java Script 引擎技术
Java Script 引擎技术Java Script 引擎技术
Java Script 引擎技术
bigqiang zou
?
千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7
javatwo2011
?
Swift 程序语言介绍
Swift 程序语言介绍Swift 程序语言介绍
Swift 程序语言介绍
明 李
?

Recently uploaded (7)

原版一样(罢鲍厂毕业证书)爱尔兰阿斯隆理工学院毕业证中留服认证书在线办理
原版一样(罢鲍厂毕业证书)爱尔兰阿斯隆理工学院毕业证中留服认证书在线办理原版一样(罢鲍厂毕业证书)爱尔兰阿斯隆理工学院毕业证中留服认证书在线办理
原版一样(罢鲍厂毕业证书)爱尔兰阿斯隆理工学院毕业证中留服认证书在线办理
ofe3ei2qrd
?
20250322 Build with AI - 以 MediaPipe 建構裝置端 LLM
20250322 Build with AI - 以 MediaPipe 建構裝置端 LLM20250322 Build with AI - 以 MediaPipe 建構裝置端 LLM
20250322 Build with AI - 以 MediaPipe 建構裝置端 LLM
Kun-Neng Hung
?
20250322 Build with AI - 使用 Vertex AI 建構 LLM 應用
20250322 Build with AI - 使用 Vertex AI 建構 LLM 應用20250322 Build with AI - 使用 Vertex AI 建構 LLM 應用
20250322 Build with AI - 使用 Vertex AI 建構 LLM 應用
Kun-Neng Hung
?
原版一样(鲍颁顿毕业证书)爱尔兰都柏林大学学院毕业证中留服认证书原版仿制
原版一样(鲍颁顿毕业证书)爱尔兰都柏林大学学院毕业证中留服认证书原版仿制原版一样(鲍颁顿毕业证书)爱尔兰都柏林大学学院毕业证中留服认证书原版仿制
原版一样(鲍颁顿毕业证书)爱尔兰都柏林大学学院毕业证中留服认证书原版仿制
ofe3ei2qrd
?
原版一样(顿颁鲍毕业证书)爱尔兰都柏林城市大学毕业证文凭证书原版制作
原版一样(顿颁鲍毕业证书)爱尔兰都柏林城市大学毕业证文凭证书原版制作原版一样(顿颁鲍毕业证书)爱尔兰都柏林城市大学毕业证文凭证书原版制作
原版一样(顿颁鲍毕业证书)爱尔兰都柏林城市大学毕业证文凭证书原版制作
ofe3ei2qrd
?
原版一样(颁滨罢毕业证书)爱尔兰科克理工学院毕业证毕业完成信原版仿制
原版一样(颁滨罢毕业证书)爱尔兰科克理工学院毕业证毕业完成信原版仿制原版一样(颁滨罢毕业证书)爱尔兰科克理工学院毕业证毕业完成信原版仿制
原版一样(颁滨罢毕业证书)爱尔兰科克理工学院毕业证毕业完成信原版仿制
ofe3ei2qrd
?
原版一样(狈鲍滨惭毕业证书)爱尔兰国立梅努斯大学毕业证注册证明在线购买
原版一样(狈鲍滨惭毕业证书)爱尔兰国立梅努斯大学毕业证注册证明在线购买原版一样(狈鲍滨惭毕业证书)爱尔兰国立梅努斯大学毕业证注册证明在线购买
原版一样(狈鲍滨惭毕业证书)爱尔兰国立梅努斯大学毕业证注册证明在线购买
ofe3ei2qrd
?
原版一样(罢鲍厂毕业证书)爱尔兰阿斯隆理工学院毕业证中留服认证书在线办理
原版一样(罢鲍厂毕业证书)爱尔兰阿斯隆理工学院毕业证中留服认证书在线办理原版一样(罢鲍厂毕业证书)爱尔兰阿斯隆理工学院毕业证中留服认证书在线办理
原版一样(罢鲍厂毕业证书)爱尔兰阿斯隆理工学院毕业证中留服认证书在线办理
ofe3ei2qrd
?
20250322 Build with AI - 以 MediaPipe 建構裝置端 LLM
20250322 Build with AI - 以 MediaPipe 建構裝置端 LLM20250322 Build with AI - 以 MediaPipe 建構裝置端 LLM
20250322 Build with AI - 以 MediaPipe 建構裝置端 LLM
Kun-Neng Hung
?
20250322 Build with AI - 使用 Vertex AI 建構 LLM 應用
20250322 Build with AI - 使用 Vertex AI 建構 LLM 應用20250322 Build with AI - 使用 Vertex AI 建構 LLM 應用
20250322 Build with AI - 使用 Vertex AI 建構 LLM 應用
Kun-Neng Hung
?
原版一样(鲍颁顿毕业证书)爱尔兰都柏林大学学院毕业证中留服认证书原版仿制
原版一样(鲍颁顿毕业证书)爱尔兰都柏林大学学院毕业证中留服认证书原版仿制原版一样(鲍颁顿毕业证书)爱尔兰都柏林大学学院毕业证中留服认证书原版仿制
原版一样(鲍颁顿毕业证书)爱尔兰都柏林大学学院毕业证中留服认证书原版仿制
ofe3ei2qrd
?
原版一样(顿颁鲍毕业证书)爱尔兰都柏林城市大学毕业证文凭证书原版制作
原版一样(顿颁鲍毕业证书)爱尔兰都柏林城市大学毕业证文凭证书原版制作原版一样(顿颁鲍毕业证书)爱尔兰都柏林城市大学毕业证文凭证书原版制作
原版一样(顿颁鲍毕业证书)爱尔兰都柏林城市大学毕业证文凭证书原版制作
ofe3ei2qrd
?
原版一样(颁滨罢毕业证书)爱尔兰科克理工学院毕业证毕业完成信原版仿制
原版一样(颁滨罢毕业证书)爱尔兰科克理工学院毕业证毕业完成信原版仿制原版一样(颁滨罢毕业证书)爱尔兰科克理工学院毕业证毕业完成信原版仿制
原版一样(颁滨罢毕业证书)爱尔兰科克理工学院毕业证毕业完成信原版仿制
ofe3ei2qrd
?
原版一样(狈鲍滨惭毕业证书)爱尔兰国立梅努斯大学毕业证注册证明在线购买
原版一样(狈鲍滨惭毕业证书)爱尔兰国立梅努斯大学毕业证注册证明在线购买原版一样(狈鲍滨惭毕业证书)爱尔兰国立梅努斯大学毕业证注册证明在线购买
原版一样(狈鲍滨惭毕业证书)爱尔兰国立梅努斯大学毕业证注册证明在线购买
ofe3ei2qrd
?

闯础痴础内存泄漏及诊断

  • 2. Agenda ? 什么是内存泄漏 ? 一个真实的例子 ? 诊断泄漏点 ? 利用工具发现泄漏 ? 参考资料 ? Q&A
  • 3. 什么是内存泄漏 ? JAVA 存在内存泄漏 C 的例子: int *pi; void foo() { pi = (int*) malloc(8*sizeof(int)); // oops, memory leak of 4 ints // use pi free(pi); // foo() is done with pi } void main() { pi = (int*) malloc(4*sizeof(int)); foo(); pi[0] = 10; // oops, pi is now a dangling pointer }
  • 4. Java 的例子 import java.io.IOException; import java.util.HashSet; import java.util.Random; import java.util.Vector; public class LeakExample { static Vector myVector = new Vector(); static HashSet pendingRequests = new HashSet(); public void slowlyLeakingVector(int iter, int count) { for (int i=0; i<iter; i++) { for (int n=0; n<count; n++) { myVector.add(Integer.toString(n+i)); } for (int n=count-1; n>0; n--) { // Oops, it should be n>=0 myVector.removeElementAt(n); } } }
  • 5. Java 的例子 public void leakingRequestLog(int iter) { Random requestQueue = new Random(); for (int i=0; i<iter; i++) { int newRequest = requestQueue.nextInt(); pendingRequests.add(new Integer(newRequest)); // processed request, but forgot to remove it // from pending requests } } public void noLeak(int size) { HashSet tmpStore = new HashSet(); for (int i=0; i<size; ++i) { String leakingUnit = new String("Object: " + i); tmpStore.add(leakingUnit); } // Though highest memory allocation happens in this // function, but all these objects get garbage // collected at the end of this method, so no leak. }
  • 6. Java 的例子 public static void main(String[] args) throws IOException { LeakExample javaLeaks = new LeakExample(); for (int i=0; true; i++) { try { // sleep to slow down leaking process Thread.sleep(1000); } catch (InterruptedException e) { /* do nothing */ } System.out.println("Iteration: " + i); javaLeaks.slowlyLeakingVector(1000,10); javaLeaks.leakingRequestLog(5000); javaLeaks.noLeak(100000); } } }
  • 9. 诊断泄漏点 ? 问题代码 String name = request.getServletPath(); ProfilerPoint profiler = profilerManager.getProfilerPoint(name,domain); public ProfilerPoint getProfilerPoint(String name,String domain){ ProfilerPoint point = points.get(name); if(point==null){ point = new ProfilerPoint(name,domain); ProfilerPoint old = points.putIfAbsent(name, point); if(old!=null)return old; } return point; } 永远只会变大的 points 。因为我们采用了 REST 风格的 URL 所以随着内容的增 多 URL 的数量会越来越多,这里的统计不应该根据 URL 去统计,个应该根据正 则的 URL 映射表去统计
  • 10. 利用工具发现泄漏 ? 这次的问题中我们用到的工具 jmap jstat gc.log jvisualvm Other Tools can be used GCLogViewer IBM Monitoring and Diagnostic Tools for Java
  • 11. 利用工具发现泄漏 ? gc log 开启 GC log 的方法。在 JVM 中添加如下参数 -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:somefile.log ? Jstat jstat –gc pid jstat –gcutil pid 1000 10 其中 pid 是 jvm 进程号, jstat –gcutil 1000 是代表每隔 1 秒执行一次, 10 代表一共执行 10 次
  • 12. 利用工具发现泄漏 ? Jmap jmap –histo:live pid 执行该命令可以打印出当前堆中活着的对象,我们来看看出问题的时候这里 是什么样子的
  • 14. 参考资料 ? http://www.ibm.com/developerworks/rational/library ? http:// www.ibm.com/developerworks/java/jdk/tools/gcmv / ? http://www.ibm.com/developerworks/java/jdk/tools/
  • 15. Q&A