【发布时间】:2019-05-25 09:17:45
【问题描述】:
我正在尝试使用 ImageMagick 将一个图像重叠在另一个图像之上。我设置了一台具有 16 核 cpu 和 32gb ram(c5 4x 大)的 AWS beanstalk 机器,并在 Go 环境中运行代码。每当 GET 请求到达服务器时,就会执行以下 shell 命令。这是我正在运行的命令
cmd := "convert "+ img1 + " -page +"+fmt.Sprintf("%.1f", offsetX)+"+"+fmt.Sprintf("%.1f", offsetY) + " " + img2 + " -background none -flatten "+outputFilePath
cmdout,err := exec.Command("sh","-c",cmd).CombinedOutput()
//convert img1.png -page +10+10 img2.png -background none -flatten output.png
img1 的大小约为 500x500,im2 的大小约为 200x200
我进行了负载测试,发现当前设置只能处理 15 个请求/秒,CPU 使用率为 51%。在 25req/sec 时,cpu 使用率变为 95%。我坚信我做错了什么。我正在使用 Imagemagick v6.7.8。升级到最新版本或从源代码(而不是 yum 安装)编译 ImageMagick 会有帮助吗?
我应该怎么做才能达到 100req/sec 并确保所有 vCPU 都得到最佳利用
【问题讨论】:
-
你为什么认为你做错了什么?您认为性能应该更好的原因是什么?
-
请注意,imagemagick 有(更快的)替代品。并且为每个请求启动一个外部进程并不总是最好的解决方案。
-
@Flimzy C54XLarge 是一个强大的实例,我们能够实现每秒最多 15 个请求。我认为可能需要进行一些调整,以实现每秒更高的请求。
-
除此之外,Denys 提出了很好的观点。您可以通过执行批处理、直接绑定到 imagemagick 库(请参阅此包:github.com/gographics/imagick)或使用更快的替代方案来大幅提升性能。
-
您是否尝试过启用 -opencl 的 imagemagick ?
标签: amazon-web-services go imagemagick amazon-elastic-beanstalk