作者:黄小亮
现象描述:
页面查询速度非常慢, 直到报出502 错误(Bad gateway)
现象描述: 页面查询速度非常慢, 直到报出502 错误(Bad gateway) |
错误分析 |
分析过程: 在项目做了压力测试后( 压力测试和功能是用的是一个数据库, 压力测试时产生了大量数据 ), 测试环境的查询变的很慢, 超过了mod_jk.conf 中配置的请求超时时间(JkWorkerProperty worker.localnode.socket_timeout=20, 请求转发给jboss 后,最长等待的时间 ). 页面报出了502 错误.
原因分析: 通过debug 观察到一次查询查出来的 parentNodeDOList 和 childNodeDOList 各有近万条数据, 下面嵌套进行数据的组装, 消耗了比较多的时间. 代码片段如下: ( for ParentNod eDO parentNodeDO: parentNodeDOList ()) { parentNodeDOId = parentNodeDO.getId(); for (ChildNodeDO childNodeDO : childNodeDOList ) { if (childNodeDO.getParentNodeId().equals(parentNodeDOId)) { parentNodeDO.getChildNodeDOList().add(childNodeDO); } } }
|
正确用法 |
正确用法 ( 将上面代码中 parentNodeDOList 转换为 Map, 再进行组装 , 将 N ²降为 N) : for (ChildNodeDO childNodeDO : childNodeDOList) { ParentNod eDO parentNod eDO = parentNod eMap .get(childNodeDO.getParentNodeDOId()); parentNodeDO.getChildNodeDOList().add(childNodeDO); }
|