记:5月18号下午
刚帮客户解锁登陆ip后,客户求助导出excel无响应,于是博主赶忙尝试登陆系统边尝试导出边思考,是否最近一次更新系统不小心更错了,仔细一想,上次更新内容不多不至于影响导出这一块代码。
于是我打开日志,找到了ClientAbortException: java.net.SocketException: Connection reset by peer: socket异常,字面意思"客户端异常",很明显不是代码的问题。
由于第一次看见这种异常博主马上百度了一波org.apache.catalina.connector.ClientAbortException: java.net.SocketException: Broken pipe (Write failed),浏览置顶页面https://www.cnblogs.com/tv151579/p/6124923.html,
瞄了一眼结果告诉我目前没有找到好的解决办法,没办法,只能自己想办法了。
因为导出excel是一个I/O读写操作,我出现的问题又是客户几个页面疯狂导出大量excel。
于是“第一个办法”就冲我脑海中,那就是重启服务器在告诫客户不要短时间频繁导出大量数据,为了以防万一。
重启后博主跃跃欲试导出第一份excel,哇 还是不行,对我这种对客户至上的人来说,客户时间就如同金钱,我先是告知客户给点时间我想办法,这几个字刚敲完,
这时"第二个办法"出来了,既然是频繁的I/O操作,那必然对服务器缓存要求很高,开搞
第一步:查看缓存
[[email protected] bin]$free -h
total used free shared buff/cache available
Mem: 15G 5.7G 2.1G 768K 7.7G 9.4G
Swap: 0B 0B 0B
很明显buff/cache缓冲区内存比free可分配的内存要高的多
第二步:清理缓存
[[email protected] bin]$echo 1 > /proc/sys/vm/drop_caches
[[email protected] bin]$echo 2 > /proc/sys/vm/drop_caches
[[email protected] bin]$echo 3 > /proc/sys/vm/drop_caches
清理缓存的办法很简单,随便百度就有了,因为博主已经不是第一次清缓存所以很快就给了个素质三连
第三步:查看缓存
[[email protected] bin]$free -h
total used free shared buff/cache available
Mem: 15G 6.3G 9.1G 768K 151M 9.0G
Swap: 0B 0B 0B
重新查看清理后的缓存,明显缓冲区的内存少了很多,好了,刚清理完缓存 客户就告诉我可以导出了。
整个过程用时十五分钟左右,客户至上。