【技术难题】多线程扫描本地文件快速入库,系统CPU、内存低耗
hoojo 2014-04-01 09:55:56
【场景】
本地有若干个目录(可以配置目录多少),用Java程序去扫描目录中的文件,其中每个目录的文件每秒都有文件不断的写入,就是会不停的新增文件,大概每秒20个文件左右。
ps:因为系统存在边界安全的问题,所以只能传输文件,不能进行http的网络直接访问!
【我的实现方案】
方案1、用Java程序去扫描目录中的文件,每个目录一个线程。每个线程扫描目录中的文件后就会调用入库方法进行保存入库,其中会涉及到一些业务(暂不理),入库后就会移除当前文件。
方案2、同上,用Java程序去扫描目录中的文件,每个目录一个线程。每个线程扫描目录中的文件后就会存放到一个线程队列(ConcurrentLinkedQueue)中,然后开辟可配置个数的线程进行循环读取文件队列ConcurrentLinkedQueue中的文件,调用入库方法进行保存入库,同样入库后就会移除当前文件。
【问题】
1、在Windows上运行应用,明显发现系统CPU和内存被程序占用,但在Linux上系统内存和cpu处于低耗状态,cpu使用率在120左右。
2、每秒移除文件的数量在6个左右,效率低下。没有文件增长的速度快,这样时间就了就存在大量文件堆积的情况。
ps:服务器硬件配置都高,24G内存、 双CPU * 8核心 * 双线程
不知道为什么在Linux上系统硬件资源利用不上去?还有不知道这种扫描文件的解决方案是不是根本行不通。