最近做了一个项目,从一个数据库里边查询出对应的数据,将数据整理后,生成图表,保存成pdf文件,再存入到数据库中。
数据量大约在44万多条,要求每秒生成一个pdf文件。5天左右跑完。
从业务需求来看,这应该是一个IO密集型的业务,那么对于cpu的要求在单线程情况下就显得不是那么高,所以可以采用多线程,线程池的方式并发处理业务数据。由于在生成图片时也需要一个其它的处理,目前是用nginx分流了5个phantomjs,这就占用了系统的6个进程,也占用了cpu一定的百分比。剩余的cpu,能满足java多线程的要求就可以了。
对于内存,phantomjs运行的比较稳定,
java运行内存设置的堆内存是1个g。启动了5个线程处理业务需求。
使用的分析工具是mat
linux执行命令 jmap -dump:live,format=b,file=heap-dump1.bin pid 执行完会生成dump报告文件。
将报告文件放到安装了mat的插件上,进行内存占用的分析,查看哪些地方的内存没有合理的释放,进而使系统运行的更加的稳定高效,合理的利用系统资源。