人脸识别(FaceRecognition)服务运行在Windows系统的bat文件中,其计算量非常大,运行耗时也比较长(10-20小时),并且在Java程序中使用Runtime执行命令,比直接运行cmd命令耗时更多,因此必须采取必要的手段对整个Server进行优化。
主要优化目标是降低Java程序中的执行时间,以提高吞吐率。Server类型虚拟机
CPU1核,Intel(R) Xeon(R) CPU E5603 @ 1.60GHz
内存3GB操作系统Windows XP Pro Version 2002 SP3
Tomcatapache-tomcat-7.0.47-windows-x86
JDKjdk1.7.0_04
下面,搭建模拟环境,分析潜在的优化点。
1.3.1加大Java VM内存
加内存,catalina.bat中加上Java VM参数:set JAVA_OPTS=-Xms1024m -Xmx1024m -XX:PermSize=128M -XX:MaxPermSize=256m
下面是Tomcat添加JVM参数之后的对比结果(测试ffmpeg命令):默认内存(64M)85 s
加大内存(1024M)85 s
可见,优化内存,基本无效。
仍然采用上面的测试例子,不同方法的执行时间对比如下:命令行中直接执行bat文件69s
使用RunTime,不加cmd /c start104s
使用RunTime,加cmd /c start,内存为64M85s
使用RunTime,加cmd /c start,内存加大到512M85s
使用processBuilder,不加cmd /c start88s
使用processBuilder,加cmd /c start87s
使用processBuilder,加cmd /c87s
优化后,运行时间提升幅度为(104-85)/104*100%=18.27%。直接执行,输出信息80s
直接执行,不输出信息72s
优化后,运行时间提升幅度为(80-72)/80*100%=10%。1核2.4GHz292s