前几天领导扔给我一个任务让我对某个业务系统进行性能优化,当前现状是每秒50并发响应时间就在30s左右,之前没有接触过性能优化完全没有头绪。
领导说公司买了一套dynatrace软件可以直接用这个软件进行分析。在测试环境压测发现情况如下:
经统计一个接口中共打印了80多个debug级别的log,耗时巨大。修改日志级别后测试发现响应时间降至10s左右。之前考虑过日志可能会影响性能但是没有想到影响如此巨大。
继续处理发现xml processing 实例化消耗了大量时间在7s左右,最后定位到是xml与实体类的相互转换导致了大量实例化。
查询了一下jaxb的性能优化发现诸多案例。优化方案如下:
static Map<String, JAXBContext> jaxbContextMap = new HashMap<String, JAXBContext>();
public static String toXML(Object obj, String encode, boolean format, boolean fragment) {
try {
JAXBContext jaxbContext = jaxbContextMap.get(obj.getClass().getName());
if(jaxbContext == null){
// 如果每次都调用JAXBContext.newInstance方法,会导致性能急剧下降