性能

ECMAScript 6,令Node.js也可以写出同步执行的代码(上)

主宰稳场 提交于 2019-12-01 12:15:51
从MOsky的博客阅读此文 引言 本人学习Node.js已有两周了,有点心得,写成文章,一方面便于今后自己查阅,另一方面巩固自己所学。如有错误,请诸位赏脸批评指教。 Node.js给我的第一印象就是,它的I/O操作是非阻塞的。非阻塞I/O带来了性能上的优势。与Java的阻塞式I/O操作做对比,Java程序需要从网络下载资源的时候,阻塞线程,当查询数据库的时候,阻塞线程,当读取文件的时候,阻塞线程。诸如此类的来自I/O的阻塞将浪费不少CPU的时间。如果心疼这些浪费的时间,那好,你就多开几个线程或进程。但这又引入了线程之间切换的代价。 Node.js使用事件驱动机制,当涉及I/O操作时,代码异步执行。这样带来的另一个好处就是,不需要考虑麻烦的 线程安全 问题,因为到Node.js即便是单线程,也不会因为I/O阻塞而出现性能瓶颈。同样和Java做比较。Java因为性能问题而开多线程,因为开多线程而需要考虑线程安全问题。Node.js可不这样。君不知曾有人在多线程的情况下使用HashMap类而导致服务器崩溃,虽然这只能算自作自受(因为HashMap的API上明确告诉你HashMap是非线程安全的),但如果语言本身就令程序员无需担心线程安全问题,那么这种情况就不会因为程序员的粗心而发生了。 但非阻塞I/O操作也有令人不爽的地方,进行I/O操作的时候,只能 异步调用 。 异步调用的缺点

使用JavaMelody监控Java EE应用

走远了吗. 提交于 2019-11-30 14:56:49
本文主要完成如下一个任务: 对一个已有的Web应用工程,添加 JavaMelody 工具,从而去监控和查看Web应用的运行情况,比如: Http请求的执行时间 、 SQL语句的执行时间 、 PDF报表的生成 。 JavaMelody 简介 从Java Melody的 WIKI 页面上可以看到: The goal of JavaMelody is to monitor Java or Java EE applications in QA and production environments. It is not a tool to simulate requests from users, it is a tool to measure and calculate statistics on real operation of an application depending on the usage of the application by users. JavaMelody的目标是监控QA环境或者生产环境Java或者Java EE应用。 JavaMelody 不是一个模拟用户请求的工具;它是一个用于对应用上的真实操作进行衡量和和计算统计的工具,这些真实的操作取决于用户在应用上的使用情况。 JavaMelody 能够监测Java或Java EE应用程序服务器,并以图表的方式显示

一次FULL GC问题的排查

非 Y 不嫁゛ 提交于 2019-11-30 06:05:32
一、背景 线上一个项目,每次机器重启时项目都会报出大量的Timeout,同时每个集群节点都被监控到较为频繁的Full GC。之后同事虽然尝试过JVM调优并适当调大了老年代空间,但依然不能根本上解决问题。当时该问题被初步归咎于系统中整合的Groovy,但并未证实。问题汇总如下: 问题一:项目启动时报出大量Timeout; 问题二:项目运行时,频繁Full GC; 随后,我着手做另外一个项目GLUE,该项目同样需要整合Groovy,在做并发测试时,我发现了同样的问题。 经过排查并做出优化,新项目GLUE在并发测试下基本不存在Full GC的问题,在此将问题处理过程记录如下,希望可以给大家一点参考。 二、分析 新系统GLUE底层基于Groovy实现,系统通过执行 “groovy.lang.GroovyClassLoader.parseClass(groovyScript)” 进行Groovy代码解析,Groovy为了保证解析后执行的都是最新的脚本内容,每进行一次解析都会生成一次新命名的Class文件,底层代码如下图: 因此,如果Groovy类加载器设置为单例,当对脚本(即使同一段脚本)多次执行该方法时,会导致 “GroovyClassLoader” 装载的Class越来越多。如果此处临时加载的类不能够被及时释放,最终将会导致PermGen OutOfMemoryError

PostgreSQL数据库和与mysql的性能比

ⅰ亾dé卋堺 提交于 2019-11-30 03:34:53
如果很粗略地观察 PostgreSQL,会觉得这个数据库系统和其它数据库很类似。因为 PostgreSQL 使用 SQL 语言来在执行资料的查询。这些资料通过连外键联系在一起,以一系列表格的形式存在。PostgreSQL 相对于竞争者的主要优势,主要的特征为可编程性:对于使用数据库资料的实际应用,PostgreSQL 让开发与使用的工作,变得更加容易。 SQL 数据在"平面表格"中存储简单的数据类型,需要用户使用查询把有关的信息收集在一起。这与应用和用户利用数据自身的方式相对立:典型的使用带有丰富数据类型的高级语言,在其中所有有关的数据作为它自己的一个完整单元来操作。典型的称呼为记录或对象(依据各自语言)。 转换来自 SQL 世界的信息到面向对象编程世界体现得很困难,因为两者有非常不同的数据组织的模型。工业界把这个问题称为阻抗不匹配:从一个模型映射到另一个要花费项目开发者 40% 的时间。一些映射解决方案,典型的称为对象-关系映射,致力于这个问题,但是它们花费很多并有自身的问题,导致糟糕的性能或强制所有的数据访问通过映射所支持的一种语言来进行。 PostgreSQL 可以直接在数据库中解决很多这种问题。PostgreSQL 允许用户定义基于正规的 SQL 类型的新类型,允许数据库自身理解复杂数据。例如,你可以定义一个 address 来组合一些事物如街道编号、城市和国度的字符串

基于图像识别的跨平台的手机自动化测试方案

断了今生、忘了曾经 提交于 2019-11-29 19:51:15
图像识别技术目前来说已经相对健全了。用来做手机的自动化测试,于是变有了可能性。思路大概就是通过一张张的截图去点击合适的位置。 airtest是跨平台的,一个脚本能在android上跑,也能在ios上跑。 项目地址: https://github.com/netease/airtest star数有点少,不过这不是问题。文档还是挺全的。 代码大部分是用python写的。 贴上代码举个例子。 # 引入模块 import airtest # 连接设备, 操作记录写到airtest.log中 dev = airtest.Device('android://ybs56213', log='airtest.log') # 点击操作 dev.click('start.png', duration=0.1) # 拖拽操作 dev.drag('a.png', 'b.png') # 等待 dev.wait('finish.png') 性能监控 # 程序性能监控 m = airtest.Monitor('android://ybs56213', 'com.netease.test') # 获取cpu和内存数据 cpu = m.cpu() mem = m.memory() # 将数据记录到日志中,每隔0.5s m.watch('filename.log', interval=0.5, background

Hotspot 性能架构 -转

ぐ巨炮叔叔 提交于 2019-11-29 00:28:06
第一章:介绍和概述 Java HotSpot虚拟机是Sun公司的Java平台一个高效的虚拟机实现。Java HotSpot技术提供Java标准平台的基础设施,提供对快速开发、部署关键业务的桌面和企业应用程序的解决方案。Java SE可应用在Solaris操作环境、Linux和Windows下,也可以应用在其它通过Java技术认证的平台下。 Java平台已经成为软件开发和部署的主流工具。拥有成千上万的开发者和用户,java平台在如下许多方面增长迅速:从信用卡到无线设备,从桌面机到大型机。Java平台是部署网页Applet、Web服务、大型商业程序等应用的基础设施。 Java HotSpot构建在Java技术跨平台和健壮的安全模型之上,并具备可扩展性、质量和性能方面的新特性。除了这些新特性之外,该版本的HotSpot是向上兼容的。 Java HotSpot几乎全面支持企业应用的开发、部署和管理,它被用在: 集成开发环境(IDE),如Sun Java Studio工具、NetBeans开源项目、IBM的Eclipse,Oracle JDeveloper等等。 应用服务提供者,如Sun Java系统应用服务器、BEA系统WebLogic软件、IBM WebSphere软件,Apple电脑的WebObjects软件等等。 Sun Microsystems, Inc

Java序列化与JSON序列化大比拼

北慕城南 提交于 2019-11-27 13:28:31
一、背景 有项目需要传输Map结构的数据,有人倾向用Java序列化来做,有人倾向用JSON的序列化来做。所以我们还是比比吧。 Java观点:Object2Object,使用时简单快速。 JSON观点:JSON格式与语言无关,扩展性强,速度也应该不慢。 大家可能对Java序列化都有一个错误的认识,认为Java序列化比JSON的序列化效率高并且序列化的数据小,其实实际上并不一定是这样,我这次就想通过实际测试来解开这个谜团 。 二、测试方式 测试同一个Map<String,Object>并序列化为byte[],并再将byte[]反序列化为Map<String,Object>的过程。Object中包括String,Integer,Long,Boolean,Float,Double常规类型的数据。 序列化:Map<String,Object> -> byte[] 反序列化: byte[] -> Map<String,Object> 测试各种大小不同的Map,并循环执行同一操作N次,来得到一个相对稳定的线性结果。 三、比较的对象 JAVA: 手写Java(1.6.0_32)与Common Lang3(3.1)的SerializationUtils。 JSON: 将采用Gson(2.2.2)与json-smart(2.0-RC2)两种不同的JSON解析器。json

Hibernate 性能优化法则

余生长醉 提交于 2019-11-27 06:16:28
原文同步至: http://waylau.com/tips-to-boost-your-hibernate-performance/ Hibernate 是 Java EE 应用中流行的 JPA 框架,简单易用,但很多使用过 Hibernate 的开发者都普遍反映 Hibernate 性能低下。究其原因,还是使用者没有对 Hibernate 进行过深入理解,对 Hibernate 的应用也只是浮于表面。本文介绍了几种简单实现 Hibernate 性能优化的方法。 启用 Hibernate 数据统计策略 没有测量就没有优化。启用 Hibernate 数据统计策略,用来做优化前后的数据对比。 将 hibernate.generate_statistics 置为 true ,日志级别 org.hibernate.stat 置为 DEBUG ,Hibernate 会收集内部统计数据,比如查询的性能、缓存命中情况等。 做到这一步,你可以避免常见的问题,比如,查询缓慢,查询次数太多,缓存没有使用等情况。还有一点要注意,数据库的测试数据量大小对于查询结果影响也很大。 改进慢查询 慢查询并不是一个真正的 JPA 或 Hibernate 的问题。这种性能问题在每一个框架中都有可能发生,甚至是普通的 SQL 或者 JDBC,这时就需要在固定的 SQL 和数据库级别进行分析。如果你选择这样做了

Thymeleaf模板性能测试

随声附和 提交于 2019-11-26 17:53:37
1 Beetl 2 FreeMarker 3 Thymeleaf 对于这三种模板的介绍可以在oschina上查看,对于前两者比较熟悉,对Thymeleaf是新的认识, Thymeleaf有一个地方本人很喜欢 ,模板页面 静态或者 动态打开可以正常显示,方便前端测试和后端分离开发,下面是对三者的性能测试。 通过 @闲.大赋 ,找到了测试工具TEB, http://git.oschina.net/kiang/teb @kiang __________________________________________________________________________________________________________________________ 发现Beetl和FreeMarker测试弄能代码都已经实现,于是对Thymeleaf进行了添加, 这里本人第一次用Thymeleaf所以不清楚对Thymeleaf配置是否对它性能产生了影响,下面直接代码: package kiang.tei; import kiang.teb.TebEngine; import kiang.teb.TebModel; import org.thymeleaf.TemplateEngine; import org.thymeleaf.context.Context; import org