最近发布了一个日常,直接导致系统响应时间变慢了两倍,系统load增长了4倍,还好由于PV不是很大,系统没出什么问题,但是如果这个系统是公司的主系统,承担大部分的流量的话,估计系统就挂了,现在想想有点后怕,把这次故障的过程记录下来。
故障的起因很简单,我需要提供一个根据本地ip获取地址的接口,这里我调用了公司统一的一个底层地址接口,代码如下
String clientIp = rundata.getRequest().getRemoteAddr();//用户IP地址
ITbip tbip = new TbipImpl();
tbip.setEncode("gbk"); //设置所采用的编码,参数支持"gbk"或"utf8",默认为gbk。
tbip.init();
IpInfoEntity ipInfo = tbip.getIpInfo(clientIp);
String regin = ipInfo.getRegion();
String city = ipInfo.getCity();
context.put("regin",regin);
context.put("city",city);
这个接口上去以后,系统性能马上就下来了,问题定位倒很容易,就这么几行代码,主要的性能消耗点就在tbip.init()这个方法,里面的代码如下:
public void init() throws IOException {
String resFile = "";
if (this.encode.equals("gbk")) {
resFile = "/ipdata_geo_isp_code.txt.gbk";
} else {
resFile = "/ipdata_geo_isp_code.txt.utf8";
}
InputStream is = this.getClass().getResourceAsStream(resFile);
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line = "";
while ((line = br.readLine()) != null) {
int position1 = line.indexOf(",");
int position2 = line.indexOf(",", position1+1);
int position3 = line.indexOf(",", position2+1);
int position4 = line.indexOf(",", position3+1);
IpSegInfoEntity ipSegInfoEntity = new IpSegInfoEntity();
ipSegInfoEntity.setLipStart(Long.parseLong(line.substring(0, position1)));
ipSegInfoEntity.setLipEnd(Long.parseLong(line.substring(position1+1, position2)));
ipSegInfoEntity.setDetail(line.substring(position4+1));
//System.out.println(ipSegInfoEntity);
ipSegEntityList.add(ipSegInfoEntity);
}
br.close();
}
可以看到,这段代码就是读取一个ip地址对应关系的文件,然后把它读入到内存中,可以想像,这个文件可以有多大,大概是25M的样子,就是因为这个init方法,导致每次请求这个接口的时候,内存就会消耗掉25M左右。因此导致系统频繁GC,导致请求响应变慢,请求变慢,导致运行队列过长,从而导致load上升等等问题。解决方法很简单,在系统刚启动的时候,把文件放入到内存中就行了
教训:1:每次调用别人的接口,要看仔细demo,否则容易被误导,这次的错误代码就是参照demo写的,因此就有问题了
2:碰到init方法的时候千万注意,因为有可能里面会有很复杂的逻辑,很有可能调用一次就够了,调用多次的话,就会有性能问题
分享到:
相关推荐
正因为如此,低级格式化在处理旧设备、回收硬盘空间、处理硬盘错误或病毒等问题时具有不可替代的作用。 然而,在使用移动磁盘低级格式化工具进行操作之前,需要重点注意以下几点: 首先,数据安全是使用低级格式化...
描述中提到的“在操作系统下不能格式化,或格式化出错的情况下,用此软件能恢复”,指的是当U盘出现严重错误,如病毒攻击、文件系统损坏或者硬件故障导致的无法正常格式化时,可以借助专业的低级格式化工具进行修复...
1. 硬盘出现严重错误:当硬盘出现坏道、读写错误等硬件问题时,高级格式化可能无法解决问题,此时可能需要通过低级格式化来尝试修复。 2. 二手硬盘处理:购买或回收二手硬盘时,为了确保数据安全和硬盘的可重用性,...
2. **修复硬件错误**:如果MP3播放器或U盘出现读写错误,低级格式化可能能够修复这些问题,因为它会重新定义每个扇区的状态。 3. **恢复设备性能**:有时设备因为碎片过多或者文件系统损坏导致运行缓慢,低级格式化...
2. 目的:主要目的是在硬盘出现严重错误或需要消除所有数据时使用,比如处理坏道、清除病毒感染或者准备出售硬盘。 二、操作步骤: 1. 打开硬盘管理工具:在Windows系统中,可以通过右键点击“我的电脑”或“此电脑...
移动硬盘低级格式化汉化版是一款专门针对硬盘、U盘以及移动硬盘的实用工具,旨在解决这些存储设备出现的...在日常使用中,定期检查硬盘健康状态,合理规划数据备份,将有助于延长硬盘寿命,减少低级格式化的必要性。
3. **修复功能**:在某些情况下,低级格式化可以修复硬盘的物理错误,如坏道等问题,提高硬盘的工作稳定性。 4. **简便操作**:界面简洁,用户友好,只需按照提示即可完成操作,适合不具备专业IT知识的普通用户使用...
低级格式化,与我们日常常见的格式化操作有所不同。它是一种更为底层的操作,能够重新划分磁盘上的扇区,清除所有数据,并将硬盘恢复到出厂状态。这个过程不仅包括文件系统的重建,更重要的是对硬盘的物理扇区结构...
3. 文件系统错误:如果U盘的文件系统严重损坏,无法通过普通的格式化修复,低级格式化可以重建文件系统结构。 4. 恢复原始性能:长期使用后的U盘可能性能下降,低级格式化有时能恢复其初始性能。 在执行U盘低级格式...
在日常工作中,星梭低级格式化工具主要用于硬盘的初始化、故障排查和数据恢复等场景。了解并正确使用这样的工具,对于IT技术人员来说是非常必要的技能,可以帮助他们在处理硬盘问题时更加高效和安全。
在日常使用中,我们通常只进行高级格式化,但某些特定情况下,如硬盘出现严重错误、需要彻底清除数据或重新划分磁盘区域时,就需要进行低级格式化。 低级格式化不仅仅是删除数据,它会按照硬盘制造商设定的标准重新...
首先,当硬盘出现大量坏道,导致无法正常进行高级格式化或数据无法正常读写时,可能需要低级格式化来清除错误。其次,在更换硬盘控制器后,为了确保新控制器能正确读写原有数据,可能需要对硬盘进行低级格式化以适配...
1. **问题修复**:当U盘出现无法读取、写入错误或者病毒感染等问题时,低级格式化可以作为最后的解决手段,消除潜在的硬件故障或软件冲突。 2. **隐私保护**:为了彻底删除U盘上的敏感信息,低级格式化是最佳选择,...
2. **谨慎操作**:低级格式化是一种强度较高的操作,不适用于日常清理。只有在高级格式化无效或U盘存在严重问题时才考虑使用。 3. **适用性**:确认U盘的损坏程度,如果硬件损坏,低级格式化可能无法解决问题,甚至...
内存卡在日常使用中可能会遇到各种问题,如文件系统错误、无法识别或读取速度慢。此工具通过扫描并修复内存卡的错误,帮助恢复其正常工作状态。这通常包括检查坏块、修复文件系统错误以及恢复丢失的分区信息。 对于...
在日常使用中,当硬盘出现读写错误、系统无法识别或者性能下降时,这样的工具能派上用场。 压缩包子文件的文件名“victoria43cn.exe”很可能是指Victoria,这是一个著名的硬盘检测与修复工具的中文版。Victoria是一...
在数字化时代,存储设备的管理成为了日常工作中不可或缺的一环。其中,低级格式化工具扮演着至关重要的角色,它能对存储设备进行深度清理和初始化,确保数据的安全清除。本文将围绕“Silicon Power Low Level ...
在日常使用中,我们可能遇到硬盘出现坏道、病毒感染或数据无法正常读取等问题,这时低级格式化就能派上用场。与常规的高级格式化不同,低级格式化会更彻底地清理硬盘上的所有数据,并重新划分磁盘的扇区和轨道,以...
磁盘低级格式化工具是计算机用户用于对硬盘或移动存储设备进行深度清理的重要软件,尤其在...在日常维护中,普通格式化往往足以满足大多数需求,只有在特定情况下,如处理严重错误或隐私保护时,才需要考虑低级格式化。
而低级格式化则是直接对存储介质的物理扇区进行重新定义,消除任何潜在的逻辑或物理错误。"星梭低级格式化工具"就是专门为此目的设计的软件,它可以对U盘进行深层次的修复,帮助用户摆脱U盘故障带来的困扰。 U盘打...