转自:http://hellojava.info/?p=176
参考:http://www.atatech.org/articles/41454
很多流量大的Java应用在重启的瞬间很容易出现负载比较高的现象,通常会看到的原因可能是GC线程、业务处理线程以及JVM编译线程耗CPU较多,这个问题在目前要解决其实是比较困难的,原因如下。
Java程序在启动的时候所有代码的执行都处于解释执行模式,只有在运行了一段时间后,根据代码方法执行的次数,或代码里循环的执行次数等达到一定的阈值才会编译成机器码,编译成机器码后执行效率会得到大幅提升,而随着执行时间进一步拉长,JVM的各种更高级的编译优化手段就会逐渐加上,例如if条件的执行状况,逃逸分析等,具体的更多信息可以看看以前撒迦写的Java执行的PPT。
因此Java程序要达到一个比较稳定的高效的代码执行是需要一定的时间的,为了解决这种问题,通常来说暂时可以采用的解决方法是:
1. 主动对Java程序进行热身
在启动完成后,主动的访问热点的代码入口,确保主要的热点代码编译成机器码后再放入流量,可通过-XX:+PrintCompilation来确认。
2. 逐步放进流量
通过apache/nginx转发等逐步的放入流量,用流量来完成Java程序的热身也是一种方法,但通常来说这个操作起来比较复杂。
对于特别重要的应用,建议用第一种方法,不过通常操作起来也比较折腾。
在写一些micro benchmark代码前也请一定要记得先做warm动作,避免测试结果偏差太大。
另外,Oracle JDK从JDK 6u25以后的版本支持了多层编译(-XX:+TieredCompilation),默认是不打开的(可以用jinfo -flag或-XX:+PrintFlagsFinal来确认是否打开),这个的好处是之前server都是采用c2高级编译的,会比较耗时且要运行一段时间才会触发编译,而c1编译是比较轻量的也比较快触发,因此在启用了多层编译后,可以在启动后更快的让部分代码先进入编译模式,感兴趣的同学可以自行找下关于多层编译的一些资料。
之前听到一个消息是,Oracle JDK为了解决某个问题做的一个改进,有可能能用于提升Java应用的启动速度,也算是无心摘柳柳成荫,:),不过暂时貌似还没有什么新的进展的消息。
另外,再啰嗦说下,传说中的大方法的执行效率更低,是有可能的…原因是inline优化,Oracle JDK会有默认的MaxInlineSize的控制,如果大于了这个值,在做Inline优化的时候就会跳过,从而导致在执行方法时要多几个指令,因此方法的大小还是要稍微控制下的。
关于Java程序执行的一些原理知识,推荐看下@rednaxelafx之前写的一个巨长的PPT,:)
昨天的调查结果让我还比较欣慰,结果显示订阅我这个账号的大部分是非阿里的,挺好,:),不过话说这是我这个公众账号一天收到的最多消息的一次,希望大家有什么问题,或希望看到分享的,或希望给其他人分享的都回复我,如果有希望给其他人分享的最好了,现在微信5.0已经支持在公众账号上写作者名字了。
最后推荐下阿里技术嘉年华的微信公众号:alibabatech 会有很多阿里各种技术的分享信息,阿里在技术上还是一家比较开放的公司,因此还是能得到一些信息的。
话说阿里技术嘉年华应该算是搞得很不错,干货很多的技术大会,尽管今年开始收费了(MM不收费,这个一定要继续保持下去,:)),但价格很便宜,所以能来参加的话我觉得还是值得参加下的(尽管我个人现在对各类技术大会都不感兴趣了…)。
=============================
题图来源于:http://img0.pcauto.com.cn/pcauto/1108/31/1624710_21.jpg
欢迎关注微信公众号:hellojavacases
关于此微信号:
分享Java问题排查的Case、Java业界的动态和新技术、Java的一些小知识点Test,以及和大家一起讨论一些Java问题或场景,这里只有Java细节的分享,没有大道理、大架构和大框架。
公众号上发布的消息都存放在http://hellojava.info上。
相关推荐
我们线上的业务 jar 包基本上普遍比较庞大,动不动一个 jar 包上百 M,启动时间在分钟级,拖慢了我们在故障时快速扩容的响应。于是做了一些分析,看看 Java 程序启动慢到底慢在哪里,如何去优化,
本Bash脚本用于自动化管理Java JAR应用的启动、停止及监控。首先检查JAR进程是否在运行,如在运行则安全终止。随后,使用预设的Java参数启动JAR文件,并将输出和错误日志重定向至日志文件。启动后,脚本持续监控JAR...
3.优化程序性能,软件启动及运行速度大幅提升; 4.优化用户交互体验。 手机金山词霸主打功能: 海量词典 随时查询320余万词条海量词典,不联网也可查询常用词汇。 整句翻译 手机词霸提供整句翻译,还有180万句库供...
而且随 着业务迭代和时间的推移,应用的整体编译构建、启动速度也越来越慢,发布、扩 容、混部拉起等等一系列动作都被拖慢,极大的影响了研发和运维整体效能,应用 提速刻不容缓。 我们将阐述通过基础设施与工具的...
13、在数据库中查询语句速度很慢,如何优化? 44 14、数据库三范式是什么? 44 15、union和union all有什么不同? 45 16、char、varchar2、varchar有什么区别? 45 17、Oracle和Mysql的区别? 46 18、Oracle语句有多少...
启动时间太长 负载承受差,当系统压力上升的时候,系统的执行速度、响应时间急速下降 评价性能高低的指标(6个) 代码执行时间、CPU占用时间、内存分配、磁盘吞吐量、网络吞吐量、响应时间 解决性能的2个思想 木桶...
java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 6、说出Servlet的生命周期,并说出Servlet和CGI的区别。 Servlet被服务器实例化后,容器运行其init方法,...
提升应用的启动速度与设计这一部分主要写一写 应用启动白屏, 启动速度较慢,以及优化方案。本文一共分三个部分。搞定启动速度,让应用飞起来。1. 常规的优化方案2. 优化方案探讨3. 总结1.常规的优化方案a.热启动与...
(2)确保某个服务在其所依赖的所有其他服务都已经启动之后才启动 (3)等待知道某个操作的所有参与者都就绪再继续执行 CountDownLatch:可以使一个或多个线程等待一组事件发生 FutureTask ...
java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 9、说出Servlet的生命周期,并说出Servlet和CGI的区别。 Servlet被服务器实例化后,容器运行其init方法...
如果您是通过其他途径来的,这里有一些关键链接可以帮助您入门: -了解此高性能企业级Java虚拟机(JVM)以及为什么我们认为您希望参与其开发。 为构建指令 , ,和-这里是你如何建立一个与的OpenJDK自己OpenJ9。 ...
Window > Preferences > General > Startup andy Shutdown 在这里列出的是MyEclipse启动时加载的模块 我这里只让它加载tomcat5 勾选 MyEclipse EASIE Tomcat 5 。 怎样才能知道哪些启动项有用呢?我现在把我知道的...
一、App启动速度优化 1, 2,Permission Denial: starting Intent { cmp=com.xxx.xxx}解决办法修改com.xxx.xxx应用的manifest.xml文 . 件,找到YourActivity标签,添加android:exported="true"一句即可,该句意思为该...
巧妙的优化,例如:非依赖任务的并行运行 多线程的好处 驱动程序(将函数发送到)+ worker1 + worker2 + ...... 任务:针对分区的功能 RDD 弹性分布式数据集 Resilient = on failure , 数据由 lineage 重建 RDD 不...
积分java源码Ruby 语言优化技术 NICHOLAS BENDER,博伊西州立大学 BEN NEELY,博伊西州立大学 JOHN OTANDER,博伊西州立大学 由于其出色的迭代速度、优雅的语法和热情的社区,Ruby 编程语言最近经历了广泛的采用和...
§3.2.8 当参数指定错误时怎么办? 70 §3.3 参数内容说明 70 §3.4 DBA常用参数说明 71 §3.4.1 跟踪文件路径(BACKGROUND_DUMP_DEST) 71 §3.4.2 在缓冲区驻留对象(BUFFER_POOL_KEEP) 71 §3.4.3 版本兼容...
当然,重绘时有一些优化措施,并不是屏幕上所有的像素都需要重绘,而是有所选择,比如游戏画布上那些已经固定下来的就不需重绘。游戏画布是一个CommandListener,可以接受用户键盘命令,控制蛇的左移,右移,下移,上...
例如节点发布监视条目,多进程/等待/重新启动新链等(请参阅示例示例) 1.1.0(2020/05/13)支持Kotlin和DSL功能1.1.1(2020/07/31)优化DSL块API 1.1.2(2020/10/08)优化依赖树的遍历速度,解决Log-TASK_DETAIL...
最近在优化西瓜视频客户端冷启动速度时,发现在关闭插件 ClassLoader 注入的情况下,启动速度提升了300ms左右,但是西瓜在启动阶段并没有使用到插件,那么这么大的耗时是怎么来的呢?下面话不多说了,来一起看看详细...
4.5.2 开机速度优化 89 4.5.3 Watchdog分析 90 4.6 本章小结 93 第5章 深入理解常见类 95 5.1 概述 96 5.2 以“三板斧”揭秘RefBase、 sp和WP 96 5.2.1 第一板斧——初识影子对象 96 5.2.2 第二板斧——由弱...