作者:黄小亮
现象描述:
页面查询速度非常慢,
直到报出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);
}
|
分享到:
相关推荐
例如,在IE浏览器中,自定义Array.prototype.indexOf方法时可能会引起问题,导致for-in循环枚举到了原型链上的属性,从而改变了循环变量的值。在这种情况下,应当使用标准的for循环或者Array的forEach方法等。 第三...
在P/E循环次数方面,0.13um工艺可能会导致更快的性能退化。每次编程和擦除操作都会引起闪存单元内部的物理变化,如氧化层的厚度减少和应力累积。更小的单元尺寸意味着这些物理效应更为显著,可能导致更早达到其设计...
### 设计电源寿命的关键因素...错误的选型或不当的应用可能会导致电源系统的性能下降甚至彻底失效。因此,在设计初期仔细考虑这些因素,可以显著提高电源系统的可靠性和使用寿命。接下来的文章将继续探讨更多相关主题。
GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收...
- 循环语句是程序中常见的结构,应考虑循环的效率问题。 - 尽量减少循环体内的计算量,将不变的表达式移出循环体外。 **4.5 FOR语句的循环控制变量** - 在FOR循环中,循环控制变量的选择和使用直接影响到循环的效率...
SAN方案必须提供自管理能力,尤其在错误恢复、数据可用性以及性能管理方面,纠错和失败恢复也是企业存储的关键问题,RAID使存储管理员从由于硬盘失败而引起的数据丢失的担心中解脱出来。自动的负载平衡减轻了对存储...
这些问题通常是由于配置错误、权限不足等原因引起的。解决这些问题的方法包括检查导出/导入命令的语法、确保有足够的权限、验证数据的一致性等。 以上内容覆盖了Oracle实用教程中的主要知识点,旨在帮助初学者全面...
label语句允许给代码中的某一点设置一个标签,通常与break或continue一起使用,以便于跳出多层嵌套的循环。由于eval可以执行任何代码,包括label语句,因此在使用eval时要特别小心,以避免不小心创建了label,从而...