stacktraces_Stacktraces告诉了事实。 但事实并非如此。

stacktraces

我们公司致力于使软件错误的原因对开发人员和运营透明。 与替代解决方案相反, 我们在您发现源代码中恶意代码的地方指出了问题的所在 。 即使目前我们以检测内存泄漏的能力而闻名,但我们也正在扩展到其他领域。 为了给您一些有关我们研究方向的提示,我们决定通过三个示例进行分享。

这些示例归结为JVM功能,以提供有意义的堆栈跟踪。 在许多情况下,stacktrace确实包含解决问题所需的所有信息。 在其他情况下,它只是浮​​出水面,不知道可能是什么引起了潜在的问题。 让我用触发以下臭名昭著的错误消息的三个示例进行说明:

  • java.lang.OutOfMemoryError:无法创建新的本机线程
  • java.io.IOException:系统中打开的文件过多
  • java.lang.OutOfMemoryError:Java堆空间

所有示例都使用简单的代码片段进行了说明,从而使潜在问题更易于理解。

线程太多

static void createTooManyThreads() {try {for (int i = 0; i < TOO_MANY; i++) {Thread t = new Thread(new Runnable() {public void run() {try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}}});t.start();}} catch (OutOfMemoryError e) {e.printStackTrace();}
}

在上面的代码中,我们一直在启动线程,直到达到系统限制并遇到“ java.lang.OutOfMemoryError:无法创建新的本机线程”消息。 理解问题与线程限制耗尽有关,这有什么问题? 让我们仔细看看stacktrace:

java.lang.OutOfMemoryError: unable to create new native threadat java.lang.Thread.start0(Native Method)at java.lang.Thread.start(Thread.java:693)at eu.plumbr.demo.MisleadingStacktrace.createTooManyThreads(MisleadingStacktrace.java:34)at eu.plumbr.demo.MisleadingStacktrace.main(MisleadingStacktrace.java:16)

问题就一直盯着我们的脸-有人告诉我们添加最后一根稻草将骆驼背折断了。 同时,我们没有一个线索是,骆驼已经被完全装载了。 如果错误消息还包含一种方法,以查看在我们最后一次尝试启动最后一个调用导致上述堆栈跟踪之前,哪个调用堆栈正在消耗线程的不同跟踪,那么这将使开发人员的工作更加轻松。

但是让我们看一下相同的问题–从另一个角度来看资源消耗:

打开的文件太多

再次,让我们从示例代码开始:

static void createTooManyFiles() {try {for (int i = 0; i < TOO_MANY; i++) {File f = new File(PATH_TO_FILE + i + ".txt");f.createNewFile();OutputStream s = new FileOutputStream(f);s.write(1);}} catch (IOException e) {e.printStackTrace();}
}

该示例尝试创建许多文件,并且仅在每个文件中写入一个整数而不关闭前一个文件。 再次,运行上面的代码会导致堆栈跟踪不太有用:

java.io.IOException: Too many open files in systemat java.io.UnixFileSystem.createFileExclusively(Native Method)at java.io.File.createNewFile(File.java:947)at eu.plumbr.demo.MisleadingStacktrace.createTooManyFiles(MisleadingStacktrace.java:45)at eu.plumbr.demo.MisleadingStacktrace.main(MisleadingStacktrace.java:17)

现在,以不同的方式掩盖了相同的问题-我们确实得到了这样的消息:我现在尝试过多地打开一个文件,但是-谁打开了其他文件以在无法完成运行的程度上向JVM施加压力?

如果您仍然不确定,请看第三个示例,即我们目前的面包和黄油:

消耗太多内存

代码示例再次很简单–我们采用数据结构并不断增加结构,直到可用堆耗尽为止:

static void createTooLargeDataStructure() {try {List l = new ArrayList();for (int i = 0; i < TOO_MANY; i++) {l.add(i);}} catch (OutOfMemoryError e) {e.printStackTrace();}
}

运行代码会给您带来臭名昭著的java.lang.OutOfMemoryError:Java堆空间消息。 同样,如果所讨论的数据结构是通过源代码中的不同可能位置填充的,则很难解释。

我知道所有C语言开发人员现在都无奈地耸了耸肩,因为在他们的世界中,以上所有内容都只是采取段错误的形式,但是–如果我们走得那么远,为什么我们不能做得更好? 我相信我们可以做到,这就是我们要做的– 找到适合您的性能瓶颈 。

如果您对完整的代码示例感兴趣,可以在此处下载。 该代码在JDK 7u25上的OS X 10.9的Macbook Pro上运行。 之后,请确保您不会错过未来有趣内容的更新,并订阅我们的Twitter feed 。

参考: Stacktraces告诉了事实。 但事实并非如此。 由我们的JCG合作伙伴 Nikita Salnikov Tarnovski在Plumbr Blog博客上获得。

翻译自: https://www.javacodegeeks.com/2013/11/stacktraces-are-telling-the-truth-but-not-the-whole-truth.html

stacktraces

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/344977.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【渝粤题库】广东开放大学 营销策划 形成性考核

选择题 题目&#xff1a;宝洁公司旗下的洗发水品牌有飘柔、潘婷、海飞丝等不同的子品牌&#xff0c;这些品牌分别面对不同的细分市场&#xff0c;宝洁公司的细分依据是&#xff08; &#xff09;。 题目&#xff1a;在春节、中秋节、情人节等节日即将来临的时候&#xff0c;许多…

Linux搜索无线网络命令,Linux操作系统的无线网络命令

rts&#xff1a;指定RTS/CTS握手方式&#xff0c;使用RTS/CTS握手会增加额外开销&#xff0c;但如果无线网络中有隐藏无线节点或者有很多无线节点时可以提高性能。后面的参数指定一个使用该机制的最小包的大小&#xff0c;如果该值等于最大包大小&#xff0c;则相当于禁止使用该…

【渝粤题库】广东开放大学企业标准化 形成性考核

​&#x1f449;关注我,看答案&#x1f448; 选择题 题目&#xff1a;企业标准应当报当地标准化行政主管部门审查。 题目&#xff1a;决策论、规划论、库存论&#xff0c;都是企业质量管理中可以借鉴使用的管理办法。 题目&#xff1a;6σ工程包括6σ改进和6σ策划两种类型。 题…

在JDK 12精简数字格式中使用最小分数数字

帖子“ 紧凑数字格式出现在JDK 12中 ”演示了对JDK 12中 NumberFormat的支持&#xff0c;以支持紧凑数字格式 。 该帖子中显示的示例仅使用NumberFormat的调用重载了NumberFormat的新重载getCompactNumberInstance(-)方法返回的NumberFormat实例&#xff0c;因此没有指定诸如最…

linux做定时数据库备份,Linux实现定时备份数据库

1.创建开启定时任务1.1crontab -e 打开定时任务编辑器1.2 0 1 * * * /备份脚本存放路径-用crontab -e 编辑器打开存放好1.3 crontab -l 查看定时任务1.4 service crond start 启动定时任务1.5 service crond status查看定时任务状态2.创建定时备份脚本touch test.sh 创建脚本&…

【渝粤题库】陕西师范大学151112 审计学作业(高起专)

《审计学》作业 一、单选题 1.注册会计师评估的重大错报风险与所需审计证据的数量呈&#xff08; &#xff09;变动关系。 2.注册会计师在检查登记入账的销货业务的真实性时&#xff0c;有效的做法是&#xff08; &#xff09;。 A.从主营业务收入明细账追查至发运凭证 B.从发…

【渝粤题库】陕西师范大学163210 旅行社经营与管理

单选题 中国国际旅行社成立于&#xff08; &#xff09;年。 A.1949 B.1954 C.1980 D.1923 新中国成立后&#xff0c;我国第一家旅行社是1949年成立的&#xff08; &#xff09;。 A.厦门华侨服务社 B.中国青年旅行社 C.中国旅行社 D.中国国际旅行社 &#xff08; &#xff09;…

linux sftp自动输入密码,linux下实现sftp自动登录。

今天帮之前同事写一个sftp自动上传的脚本&#xff0c;因为sftp无法匿名登录&#xff0c;因此使用sftp时&#xff0c;每次都需要输入服务器密码&#xff0c;无法进行自动上传和下载文件&#xff0c;其中一种方法可以使用lftp这个就不在详细介绍了&#xff0c;现在介绍另外一种方…

【渝粤题库】陕西师范大学165107工作分析与设计作业(高起专)

《工作分析与设计》作业 单选题 1、工作分析最初产生于&#xff08; &#xff09;的工业企业中。 A.英国 B.德国 C.美国 D.日本 2、&#xff08; &#xff09;是组织中最基本的活动单元。 A.任务 B. 部门 C.工作 D.岗位 3、同一职系中职责繁简、难易、轻重及任职条件充分相似的…

【渝粤题库】陕西师范大学180210 国际市场营销学 作业

一、单选题 日本市场具有( )特点 A. 经营国际化 B. 市场渠道畅通 C. 销售季节性强 D. 垄断控制型市场国际工业品市场细分不可以依据( ) A. 用户规模 B. 用户购买力大小 C. 消费者年龄 D. 购买决策产生的过程文化环境是( ) A&#xff0e;静止的 B. 不会影响商业习俗的 C. 对任何…

使用ClickHouse UDF与OpenAI模型集成

本文字数&#xff1a;14683&#xff1b;估计阅读时间&#xff1a;37 分钟 作者&#xff1a;Dale McDiarmid 审校&#xff1a;庄晓东&#xff08;魏庄&#xff09; 本文在公众号【ClickHouseInc】首发 Meetup活动 ClickHouse Shenzhen User Group第1届 Meetup 火热报名中&#x…

guava的正确引入方式_使用Guava的AbstractInvocationHandler正确完成代理

guava的正确引入方式不太经常&#xff0c;但有时我们被迫使用java.lang.reflect.Proxy编写自定义动态代理类 。 这种机制实际上没有任何魔术&#xff0c;即使您永远不会真正使用它&#xff0c;也值得知道–因为Java代理在各种框架和库中无处不在。 这个想法很简单&#xff1a;…

vba执行linux命令,如何使用vba的shell()运行参数的.exe?

我有一个目标文件路径的结构如下例所示。C:\Program Files\Test\foobar.exe /G我需要做的就是使用vba的shell()命令来执行这个文件。如何格式化文件路径以告诉Shell()有一个参数&#xff0c;它需要调用与运行.exe我已经阅读/尝试(无效)在下面的结果在右边。file ""&…

【渝粤题库】陕西师范大学200271 微分几何 作业(专升本)

《微分几何》作业 一. 填空题 曲面的第一基本形式为&#xff08; &#xff09;。空间曲线的基本公式是&#xff08; &#xff09;。曲面在任一点&#xff08;u&#xff0c;v&#xff09;的单位法向量公式为&#xff08; &#xff09;空间曲线的切向量为&#xff08; &#xff…

【渝粤题库】陕西师范大学200771 可视化程序设计

《可视化程序设计》作业 一、单项选择题 1、VB应用程序在&#xff08; &#xff09;模式下不能编辑代码和设计界面。 A 运行B 中断C 设计D 以上均不能 2、将列表框&#xff08;List Box&#xff09;上要显示的内容放到列表框控件上的方法是&#xff08; &#xff09;。 A Addit…

使用Spring Boot和Vue.js构建一个简单的CRUD应用

“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕&#xff1f; 尝试使用Okta API进行托管身份验证&#xff0c;授权和多因素身份验证。 在本教程中&#xff0c;您将使用Vue.js作为客户端并将Spring Boot作为资源服务器来构…

linux 装windows软件,常用软件的安装(windows/linux)

JavaScript单线程和浏览器事件循环简述JavaScript单线程 在上篇博客的开篇中,我们曾简述了JavaScript的单线程机制和浏览器的事件模型.应很多网友的回复,在这篇文章中将继续展 ...Free Slideshow&comma; Gallery And Lightboxes Scriptshttp://bootstraphelpers.codeplex.c…

【渝粤题库】陕西师范大学201401 环境资源法作业

《环境法》作业 一、单项选择题 1&#xff0e;属于环境法保护客体的有&#xff08; &#xff09; A山林中的大熊猫 B马戏团的金丝猴 C 动物园的老虎 D家养的小狗 2&#xff0e;按环境的形成分将人类环境可划分为&#xff08; &#xff09; A 原生环境和次生环境 B 生存环境和生…

linux安装 icc编译器,安装 Intel Compiler (ifort icc icpc)

在下载目录下解压heqinheqin-dell:~/Downloads$ tar zxvf parallel_studio_xe_2017_update7.tgz进入解压后的文件夹heqinheqin-dell:~/Downloads$ cd parallel_studio_xe_2017_update7/为了记录过程而不用截图&#xff0c;我选择用命令行安装&#xff0c;当然你也可以用install…

【渝粤题库】陕西师范大学201981教育统计与测量 作业 (专升本、高起本)

教育统计与测量[数学]作业 填空 标准分数有____________、两种基本形式。 常见的集中量数有、、。 回归分析中&#xff0c;平方和分解公式为_________。 衡量测验的质量指标有_______、、、。 常用的随机抽样方法有_、、________。 用来衡量一组数据__________的量称为差异量数…