Java 性能优化实战记录(2)---句柄泄漏和监控
前言: Java不存在内存泄漏, 但存在过期引用以及资源泄漏. (个人看法, 请大牛指正)
这边对文件句柄泄漏的场景进行下模拟, 并对此做下简单的分析.
如下代码为模拟一个服务进程, 忽略了句柄关闭, 造成不能继续正常服务的小场景.
- public class FileHandleLeakExample {
- public static String readContentFromFile(String filename) {
- StringBuilder sb = new StringBuilder();
- BufferedReader br = null;
- try {
- br = new BufferedReader(new FileReader(filename));
- String line = null;
- while ( (line = br.readLine()) != null ) {
- sb.append(line).append("\n");
- }
- } catch (Exception e) {
- System.err.println(e.getMessage());
- exit(1);
- } finally {
- // 模拟疏忽关掉句柄的操作
- // try {
- // br.close();
- // } catch (IOException e) {
- // e.printStackTrace();
- // }
- }
- return sb.toString();
- }
- public static void main(String[] args) {
- while ( true ) {
- FileHandleLeakExample.readContentFromFile("1.txt");
- }
- }
- }
- /*
- 输入结果如下:
- 1.txt (Too many open files)
- */
句柄泄漏导致, 进程服务达到系统设置的上限, 进而导致不可服务状态. 这就需要必要的监控了.
如何监控或者如何在测试阶段能提前发现呢?
在linux中, 一切皆句柄, 比如file, socket都是, 每个进程都有自己的上限, 一旦超过这个上限,系统就会限制并拒绝相应的资源请求.
这个设定如下所示:
ulimit -a # ulimit -n 列出open file的个数
由此可见系统对于一般进程的文件句柄上限为 1024.
但对上面那个java进程进行观察, 却发现如下不一致的地方,如下所示:
jps #列出java进程的pid列表
cd /proc/<pid>/fd #通过linux的虚拟文件系统,进入该java进程的系统信息
ls | wc -l #统计其总开打开的文件句柄数
其拥有的句柄个数4095与系统限制的句柄数上限1024相差太远, 这是什么情况?
实际上系统的限制, 分为两种,一种为soft limit, 另一种为hard limit, soft limit相当于一个warning, 而hard limit系统则不允许超越.
执行如下命令:
ulimit -a -H # ulimit -n -H 列出open file的句柄数
现在系统的open file 4096的上限与java进程拥有的句柄数4095保持了一致.
关于soft limit和hard limit的区别, 请参阅如下链接:
http://blog.163.com/zhangjie_0303/blog/static/9908270620112233523316/
对于文件句柄数, 还可以借用lsof命令来查阅
lsof -p <pid>
Java 性能优化实战记录(2)---句柄泄漏和监控的更多相关文章
- Java 性能优化实战记录(3)--JVM OOM的分析和原因追查
前言: C/C++的程序员渴望Java的自由, Java程序员期许C/C++的约束. 其实那里都是围城, 外面的人想进来, 里面的人想出去. 背景: 作为Java程序员, 除了享受垃圾回收机制带来的便 ...
- Java 性能优化实战记录(1)---定位并分析耗cpu最多的线程
1) jps 列出相关的java进程, 以及对应的pid 也可以使用如下命令来尝试 ps aux | grep java --color 2) top -Hp <pid> ...
- 推荐:Java性能优化系列集锦
Java性能问题一直困扰着广大程序员,由于平台复杂性,要定位问题,找出其根源确实很难.随着10多年Java平台的改进以及新出现的多核多处理器,Java软件的性能和扩展性已经今非昔比了.现代JVM持续演 ...
- 《Java性能优化权威指南》
<Java性能优化权威指南> 基本信息 原书名:Java performance 原出版社: Addison-Wesley Professional 作者: (美)Charlie Hunt ...
- JVM——九大工具助你玩转Java性能优化
本文转载自 http://www.importnew.com/12324.html 本文由 ImportNew - 陈 晓舜 翻译自 idrsolutions.欢迎加入翻译小组.转载请参见文章末尾的要 ...
- Java性能优化,操作系统内核性能调优,JYM优化,Tomcat调优
文章目录 Java性能优化 尽量在合适的场合使用单例 尽量避免随意使用静态变量 尽量避免过多过常地创建Java对象 尽量使用final修饰符 尽量使用局部变量 尽量处理好包装类型和基本类型两者的使用场 ...
- 我把阿里、腾讯、字节跳动、美团等Android性能优化实战整合成了一个PDF文档
安卓开发大军浩浩荡荡,经过近十年的发展,Android技术优化日异月新,如今Android 11.0 已经发布,Android系统性能也已经非常流畅,可以在体验上完全媲美iOS. 但是,到了各大厂商手 ...
- 网站性能优化实战——从12.67s到1.06s的故事
文章摘自https://juejin.im/post/5b0b7d74518825158e173a0c 作为互联网项目,最重要的便是用户体验.在举国“互联网+”的热潮中,用户至上也已经被大多数企业所接 ...
- 44个Java性能优化
44个Java性能优化 首先,代码优化的目标是: 减小代码的体积 提高代码运行效率 代码优化细节 1 .尽量指定类.方法的final修饰符 带有final修饰符的类是不可派生的.在Java核心AP ...
随机推荐
- 【工具推荐】ELMAH——可插拔错误日志工具
今天看到一篇文章(构建ASP.NET网站十大必备工具(2)),里面介绍了一个ELMAH的错误日志工具,于是研究了一下. ELMAH 是 Error Logging Modules and Handle ...
- 浅析Oracle范式的概念(转载)
范式:英文名称是 Normal Form,它是英国人 E.F.Codd(关系数据库的老祖宗)在上个世纪70年代提出关系数据库模型后总结出来的,范式是关系数据库理论的基础,也是我们在设计数据库结构过程中 ...
- ZOJ 3644 Kitty's Game dfs,记忆化搜索,map映射 难度:2
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4834 从点1出发,假设现在在i,点数为sta,则下一步的点数必然不能是sta的 ...
- hdu 4627 The Unsolvable Problem
http://acm.hdu.edu.cn/showproblem.php?pid=4627 分类讨论一下就可以 代码: #include<iostream> #include<cs ...
- 常州培训 day6 解题报告
第一题: 题目大意: 给出一个N*N的矩阵,矩阵元素均为0或1.定义矩阵权值为sum(F[i][j]*F[j][i]); 给出K个操作: 询问矩阵的权值mod 2. 将矩阵的某一行元素取反(0变成1, ...
- JQuery 来获取数据c#中的JSON数据
C# 后台 (JSONHandler.ashx) <%@ WebHandler Language="C#" Class="JSONHandler" %&g ...
- php base64_decode 解码方法
<?php header('Content-Type:text/html;charset=utf-8'); function encode_file_contents($filename) { ...
- 【Noip2012】解题报告【字符】【贪心】【高精度】【倍增】【set】
目录:1:vigenere密码[字符]2:国王游戏[贪心][高精度]3:开车旅行[倍增][set] 题目: VJ P1778 vigenere密码 Accepted 标签:NOIP提高组2012 ...
- [vijos P1112] 小胖的奇偶
第一次看到这题怎么也不会想到是并查集题目…星期五第一次看到这题,到今天做出来,实在是废了好多功夫.看了很多人的解题都有same和diff数组,我也写了,后来发现不对啊两个数组的话find函数怎么写呢? ...
- sql学习资料
http://blog.sina.com.cn/s/articlelist_1594135432_9_1.html