昨天工作中遇到了一个问题,发现服务器内存占用率高达98%,找同事帮忙看了一下,到底是哪个文件居然占用了这么大的内存?
同事教我用以下的命令可以查看文件占用内存的情况
df -h查看系统中文件的使用情况
du -sh *查看当前目录下各个文件及目录占用空间大小
使用du -sh命令后发现,是log日志占用了大量内存。
再查看日志,发现是查询得到大批量数据,并且for循环,使用BeanUtils.copyProperties方法复制对象,这个方法会在log里记录大量的属性复制过程,如下。
sid:PC123456_00123 client_IP:10-21 09:30:00.012 [THREAD-ID=12345] DEBUG:o.a.c.b.converters.StringConverter - Using default value ''
sid:PC123456_00123 client_IP:10-21 09:30:00.012 [THREAD-ID=12345] DEBUG:o.apache.commons.beanutils.BeanUtils = BeanUtils.copyProperties(com.test.User@2d565be,com.test.User@298442)
sid:PC123456_00123 client_IP:10-21 09:30:00.012 [THREAD-ID=12345] DEBUG:o.a.c.b.converters.StringConverter - Converting 'String' value 'hello' to type 'String'
后面优化代码,对于这种会有大数据量结果的集合,代码本身就有问题,本可以不要用这种做法的,最好还是不要用这种属性复制的方法。