网站首页 > 技术文章 正文
- Maven的使用经验
- 依赖的scope有test、provided、compile等。test:一般是单元测试场景使用,在编译环境加入classpath,但打包时不会加入,如junit等;provided:表示容器或者JDK已经提供该依赖,打包时不需要打包入war;compile:默认范围,在工程环境的classpath(编译环境)和打包(如果是WAR包,会包含在WAR包中)时候都有效。
- JVM相关参考资料
- JDK内置工具的使用:
- 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}
- 线上机器每隔一个小时full gc问题排查
- 参考文章
- 排查思路
- 首先,怀疑jdk版本问题,升级之后依然存在,排除
- 第二,怀疑tomcat版本问题,由7.0.26.1升级到7.0.54.1之后消失
- 分析gc.log,每隔一小时出现一次cms收集,最开始认为这不是full gc;后查询资料发现ExplicitGCInvokesConcurrent选项会将full gc转换成cms gc,因此gc.log中没有“full gc”字样;然后根据参考文章1和参考文章2定位问题。
- 结论:tomcat 7.0.26.1版本中的JreMemoryLeakPreventionListener,该监听器每隔一个小时会触发一次System.gc()。根据 可知,在7.0.28版本将该间隔fix成Long.MAX_VALUE了。
- 在单元测试中加载配置文件
- 在spring项目中,使用Mockito+JUnit测试业务逻辑时,有时需要读取一些外部配置文件(例如biz.properties),可以参考 。
- 可以考虑使用@Properties定位配置文件、使用@Value注入配置属性;不过在这种情况下,需要解决不同环境下的属性配置问题;
- 可以考虑通过暴露set接口,在单元测试中设置对应的属性,从而避免处理外部配置文件的先关技术。
- Mockito + Spring + AssertJ是Spring项目中写单元测试的最佳组合,优点有:轻量、简洁、可以测试web层(拦截器、过滤器等)、可以测试异常分支。
- log4j中的日志级别有:DEBUG、INFO、WARN、ERROR(级别依次变高),在生产环境中一般采用ERROR级别、在开发环境中使用DEBUG级别。如果日志级别为DEBUG级别 ,则代码中的logger.debug()、logger.info()、logger.warn()和logger.error()等日志都会打印;如果日志级别为WARN,则只会打印WARN和ERROR日志。参考:
- 给Controller的@RequestMapping方法加日志,通过AOP不容易加(有解决方案),一个比较迂回的方法是,让Controller使用一个Service代理(包含一个process方法),拦截这个process方法比较容易。
- Java Web的最佳实践:Spring Boot + Thymeleaf,基础技术包括:Spring + HTML + CSS。JSP,Velocity和FreeMarker,那是上一代的模板引擎,应该尝试一下新的东西。参考:
- 数据库部分,企业级Java Web要求的知识架构很多,后端就包括数据技术,最常用的是关系型数据库MySQL,可以阅读下列文章补充一点知识点。当然,最常用、最有效的参考资料是官方文档。
- 常用概念,PV:请求次数/day;UV:不同uuid的个数/day。对于自己负责的业务,有两个日志是必须的:BI日志和业务监控日志——BI日志用于计算业务指标,可以指导运营和产品的动作、业务日志用于研发同学监控自己服务的稳定性、机器的使用率、接口的QPS等指标。
- 服务的稳定性,需要良好的监控保障,主要包括几个方面:系统监控、应用监控(JVM)、业务监控(PV/UV/RT)和调用链路监控等。
作者:javaadu
链接:https://www.jianshu.com/p/8671c788514e
猜你喜欢
- 2024-10-19 Java高频面试题之Linux(java面试 linux)
- 2024-10-19 性能测试能力提升-JVM GC监控和优化
- 2024-10-19 排查GC问题常用的工具(排查问题的方式有哪些)
- 2024-10-19 开发好物推荐8之自动化部署插件,再也不用登录SSH
- 2024-10-19 20道阿里巴巴中高级java面试题详解,把这些弄懂offer拿到你手软
- 2024-10-19 Java Web实战篇:发布和运维必备的12条Linux命令
- 2024-10-19 Java工程师常用Linux命令大全(linux javac)
- 2024-10-19 玩转linux下启动jar和关闭jar方式(java程序员必看)
- 2024-10-19 超详细的EFK安装部署教程--环境准备篇
- 2024-10-19 为什么阿里架构师是这样定位Java性能问题的?这几点总结的很详细
- 最近发表
- 标签列表
-
- cmd/c (64)
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- sqlset (64)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- linux删除一个文件夹 (65)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)