java
nokiaisacat
这个作者很懒,什么都没留下…
展开
-
java GC 日志查看 gcviewer
要查看GC日志首先要知道GC的log放在哪里,使用jps命令查看当前有哪些java进程在运行,找到我们要查看的java程序的进程pid使用命令jinfo pid 来查看这个进程对应的java 信息,可以看到大概在最下面的地方有个参数-Xloggc:,他对应的就是gc log的位置。原创 2016-08-04 22:48:15 · 12380 阅读 · 0 评论 -
性能优化(四)高CPU利用率
还是上一篇中提到过的API,通过调查我们发现这个API在需要返回的数据量比较大的有些单次调用中CPU可能达到90%到100%。所以即便是调用量不大的情况下,这个API一样是造成整个系统性能低下的最大贡献者。其中有一次调用返回时间更是长达10s。其实CPU的使用率高的话,响应时间自然就长,需要很长时间的计算才可以返回。优化的思路还是把单个查询分成多次,降低每次返回的数据集的大小。数据量比较大的表原创 2016-12-28 20:33:58 · 1786 阅读 · 0 评论 -
性能优化总结(三)一对多join的级联查询
最近在对一个已经运行了4年的老项目进行性能优化,这是一个app,我主要还是从后台优化。这个项目后台提供的API并不多,只有十几个,但是性能非常差。有些API连每分钟2000的request都扛不住,虽然后台的并发node已经增加到8个。一看代码就知道为什么了,原来这些API都需要返回很多的数据,而且是级联的数据,就像你要获得一个“军”的数据,“军”下面又有“师”,然后是旅团营连排,这样的树状结构,原创 2016-12-23 21:20:00 · 2990 阅读 · 0 评论 -
性能优化总结
最近都在进行性能优化,做个总结。首先要说的是一个新的项目,这是一个原有网站,现在加app的项目,原来的网站是收购其他公司的,老项目了。这个项目坑的地方就在于表结构非常复杂,或者说设计的不好,表结构成了一大障碍。由于大多数接口都是查询所以用了MyBatis,Sql 几乎都是自己写的,每个查询都需要join很多表。说到join,我的原则一般是不去做一对多的join,尽量确保join后面是uniqu原创 2016-12-14 20:57:13 · 462 阅读 · 0 评论 -
Spring AOP 实践(五)基础篇下
Spring支持的AspectJ切入点指示词:execution:匹配一个方法的执行,最常用的一个;within:匹配在一个包或者类型中;this:匹配一个这个类型的proxy;target:匹配一个这个类型的目标对象--被代理的对象;args:匹配一个方法,参数是这个类型;组合切入点:@Pointcut("execution(public * *(..))原创 2016-08-25 21:48:39 · 325 阅读 · 0 评论 -
Spring AOP 实践(四)利用annotation实现声明式服务
上一篇中说到Spring AOP的一个重要作用是提供声明式企业服务,比如著名的声明式事务处理。声明式企业服务真的很诱人,可以少写很多代码啊!就好像一句魔法就可以搞定一切。AOP中可以用annotation来作为切入点的判断条件,比如@Transactional作为切入点,凡是声明了这个注解的方法都会被应用到事务处理的advice。今天我要用annotation和AOP来实现缓存的读取和存储原创 2016-08-23 21:44:05 · 464 阅读 · 0 评论 -
Spring AOP实践(三)基础篇上
在Spring AOP实践(一)中已经总结了一些基础知识。AOP作为OOP的补充,完整了编程实践的方式。虽然java以面向对象语言著称,但是也不能总是言必设计模式。面向对象设计的基本模块化单元是类,而AOP的基本模块化单元是切面(aspect)。在Spring AOP实践(一)中讲到,AOP要解决的问题是“遇到某某情况,就做某某事”,放到AOP中就是预定好在某种情况下拦截某个方法,并且做什么事原创 2016-08-23 20:41:13 · 388 阅读 · 0 评论 -
Spring AOP实践(二)编程篇
上一篇泛泛的讲了很多关于AOP和代理的理解,实现原理,动态和静态代理的比较,如何选择等。这篇讲到如何实践。Spring的AOP很容易使用,查看Spring文档即可。http://docs.spring.io/spring/docs/5.0.0.BUILD-SNAPSHOT/spring-framework-reference/htmlsingle/#aop我这里要用Spring A原创 2016-08-22 21:08:45 · 516 阅读 · 0 评论 -
Spring AOP实践(一)动态代理和静态代理,为什么使用AOP
作为Spring仅次于IOC的第二大代表功能,AOP的应用就不是很广泛了。众所周知AOP是面向方面编程,是对面向对象编程做出补充的一种编程方式。AOP使得编程人员可以把分散在代码各个地方的相同功能抽象到一处进行处理。任何方法的出现都是因为有着广泛的需求,比如在编程的过程中你总会想:凡是遇到某某情况,就做某某事。这就是AOP所要解决的问题,凡是遇到某某情况,这里的某某情况就是切入点,而“就做某某事”原创 2016-08-22 20:39:41 · 5087 阅读 · 0 评论 -
JVM 堆内存调优
最近我的服务器的因为在tomcat7放了比较多的项目所以JVM内存不够用了,报OutOfMem java heap size 的异常。很显然需要对tomcat的JVM堆内存重新进行设置。我的服务器是买的阿里云的服务,单核2G内存,因为不需要跑太复杂的应用,所以这足够了。从GC日志看到当前的新生代大小为87M, 老年代大小为126M。重新设置JVM堆内存大小,需要设置以下参数:1原创 2017-02-25 22:21:32 · 562 阅读 · 0 评论