2014年个人总结

早在两个月前就有想提笔记录下2014年的工作与生活,但由于公司10106的工作制度,我只能在今天这个时间点去总结我2014年的工作与生活.这一年我收获很多,我的家庭生活和工作都经历了很大的变化.

  1. 最最重要的,我有了一个可爱的儿子,他的出生给我家平添了很多快乐.
  2. 在天下秀呆了近4年后被”卖到”了一家初创公司,俨然已经将自己锻炼成了个全栈,另外公司也完成了A轮,但总感觉缺少了些什么.
  3. 计划一个月一篇blog实际只写了8篇,虽未达每月一博的预期,但还是坚持下来了.
  4. 今年抽空读了Netty权威指南,Java性能优化权威指南,大型网站系统与Java中间件实践,京东技术解密,涨了不少姿势.
  5. 技术方面有一定提升,主要还是得益于weibo和github,让自己跟的上技术发展的脚步,另外leetcode有空也刷刷了,脑子还是需要多练练.

阅读全文…

Tomcat无响应案例分析

问题描述

生产环境下有几台tomcat,但突然某个时候发现所有的请求都不能响应了,由于我们的web server使用的是nginx,会将请求反向到tomcat上,所以起初怀疑是nginx就没有收到请求,但查看日志后发现,nginx中大量出现499的返回,这说明问题还是出在tomcat上.

问题排查

  1. 首先我想到的是不是CPU跑满了,虽说CPU没有报警但还是本能的top命令看下系统负载,发现系统只有0.x的负载,cpu,内存消耗都是正常的.
  2. 由于CPU没有出现异常,所以应该不是GC出现了问题,但还是检查了下GC log,果然GC也没问题
  3. 此时必须让jstack上场了,果然在使用jstack后发现很多线程都是WAITING状态
  4. 阅读全文…

JVM GC问题排查手段

最近生产环境上出现过两次由于JVM参数设置不当导致的频繁FGC的问题,现在做个简单的记录.

  1. 首先查看GC日志,观察每次FGC的频率以及各个区的回收情况
  2. 然后再配合使用jstat与jmap查看是否有泄露问题,分析内存泄露最佳组合就是jamp dump + MAT,先dump内存,然后MAT分析来定位问题,要jmap -heap需要慎用,在用cms gc的情况下,有些时候jmap -heap会循环输出,然后就卡死了
  3. 最后使用jstack排查各线程的状态,包括用户线程和虚拟机线程,同时结合Lock信息来检测是否发生了死锁和死锁的线程.
    ​另外在用top -H看到占用CPU非常高的pid时,可以转换成16进制后在jstack dump出来的文件中搜索,看看到底是什么线程占用了CPU

总之,GC问题是一个需要不断跟进的问题,它会随着业务与技术发展而不断出现,需要用到很多方法与经验.

升级至Yosemite后Eclipse ADT找不到设备

问题描述

Apple公司正式推出了OS X Yosemite,但是升级以后android开发套件也出现了一些莫民奇妙的问题,首当其冲的就是设备选择器中找不到连接至mac的设备了,尝试的很多方法,但依旧没能解决问题,但这个问题在OS X Mavericks是不存在的.

解决方案

首先我们还是使用adb devices查看到底能否识别,如果devices list中找不到设备,那么你需要做以下检查.

  1. 驱动是否正确,包括VID,PID设置
  2. 手机是否开启USB DEBUG,并且允许安装非市场应用
  3. 检查你的usb连线
  4. 重启你的电脑与手机

在这一步完成看,相信你能在devices list找到你的设备,如果还不行,那么试试 adb kill-server 与 adb start-server.
最后,我们打开eclipse,查看DDMS,如果发现你的设备正确被识别,那么基本上你在调试的时候设备选择器会列出你的设备.
如果设备选择器依旧没有列出,那么你可以尝试拖动选择器上的分隔栏,然后你的设备会出现,是不是很神奇?

仿余额宝收益图实现

问题描述

最近的android客户端中需要实现类似余额宝中的折线收益图,乍一看似乎比较简单,但还是有不少细节需要解决,所以我们还是选择了Android-GraphView做为基础来进行改造.对于基本的折线功能,Android-GraphView已经能满足,但对于折线粗细,x轴等距分布以及最后一个记录的标记提示,以及空心小圆点都需要处理,如图显示.UI图例
阅读全文…