JAVA基础javawebjavaweb收藏

Java Web技术经验总结(二)

2016-05-11  本文已影响5359人  程序熊大

该系列的第一篇在此:Java Web技术经验总结一,主要包含我在日常工作中的经验和心得体会(如有不足之处欢迎指出)。

  1. Maven的使用经验
  1. JVM相关参考资料
  1. JVM观察和调试相关的命令

    • 排查full gc问题,可以通过命令jstat -gccause java_pid 1s查看gc发生的原因
    • 观察gc.log的时候:(1)GC开头的都是Young GC;(2)CMS-initial-mark标识,且没有full字样的,是old区的GC;(3)带full字样的是fgc(例外情况:-XX:+ExplicitGCInvokesConcurrent,这个参数会把full gc转成cms gc,因此gc.log中不会有full gc字样)。
    • 查看JVM进程:ps -ef|grep java
    • 查看JVM内存占用信息:
      sudo -u admin /opt/taobao/java/bin/jstat -gccause ${PID} 1000 1000
    • dump内存:
      sudo -u admin /opt/taobao/java/bin/jmap -F -dump:live,file=/home/admin/heap.bin ${PID}
  2. 线上机器每隔一个小时full gc问题排查

  1. 在单元测试中加载配置文件
  1. Mockito + Spring + AssertJ是Spring项目中写单元测试的最佳组合,优点有:轻量、简洁、可以测试web层(拦截器、过滤器等)、可以测试异常分支。

  2. log4j中的日志级别有:DEBUG、INFO、WARN、ERROR(级别依次变高),在生产环境中一般采用ERROR级别、在开发环境中使用DEBUG级别。如果日志级别为DEBUG级别 ,则代码中的logger.debug()logger.info()logger.warn()logger.error()等日志都会打印;如果日志级别为WARN,则只会打印WARN和ERROR日志。参考:日志级别的选择

  3. 给Controller的@RequestMapping方法加日志,通过AOP不容易加(有解决方案),一个比较迂回的方法是,让Controller使用一个Service代理(包含一个process方法),拦截这个process方法比较容易。

  4. Java Web的最佳实践:Spring Boot + Thymeleaf,基础技术包括:Spring + HTML + CSS。JSP,Velocity和FreeMarker,那是上一代的模板引擎,应该尝试一下新的东西。参考:Thymeleaf官网

  5. 数据库部分,企业级Java Web要求的知识架构很多,后端就包括数据技术,最常用的是关系型数据库MySQL,可以阅读下列文章补充一点知识点。当然,最常用、最有效的参考资料是官方文档。

  1. 常用概念,PV:请求次数/day;UV:不同uuid的个数/day。对于自己负责的业务,有两个日志是必须的:BI日志和业务监控日志——BI日志用于计算业务指标,可以指导运营和产品的动作、业务日志用于研发同学监控自己服务的稳定性、机器的使用率、接口的QPS等指标。

  2. 服务的稳定性,需要良好的监控保障,主要包括几个方面:系统监控、应用监控(JVM)、业务监控(PV/UV/RT)和调用链路监控等。

上一篇下一篇

猜你喜欢

热点阅读