【发布时间】:2017-08-24 22:22:27
【问题描述】:
我使用 PHP exec() 在我的服务器上运行 FFmpeg。
目前它在编码时使用了 100% 的 cpu 线程。
我关注了this gude,它使用一个名为cpulimit 的程序将其降低到 30%。
PHP
$args = "nice -19 cpulimit -l 30 -- ffmpeg -y -i intput.avi -vcodec libx264 -acodec aac -b:a 192k -threads 1 output.mp4"
exec(escapeshellcmd($args));
FFmpeg/PHP 可以工作,它可以通过终端与nice/cpulimit 一起工作,但在将nice -19 cpulimit -l 30 -- 添加到 PHP 脚本后,它不再与exec() 一起工作。
输出
FFmpeg 输出返回空白。我无法看到完整的输出,我尝试使用:
$output = shell_exec($args);
echo "<p>$output</p>"
和
file_put_contents("/var/www/mysite/logs/$output.log", $line . PHP_EOL, FILE_APPEND);
但他们返回 1 个空行。
解决方案
我的想法是 www-data 运行 FFmpeg 而nice/cpulimit 可能需要root?
如何让 PHP exec() 与 FFmpeg args 和 cpulimit 一起使用?
或者有没有其他方法可以限制使用百分比?
【问题讨论】:
-
您限制此进程的 CPU 使用率的目标是什么?请记住,使用
cpulimit将进程限制为 30% 的 CPU 使用率将使完成时间延长约 3 倍…… -
@duskwuff 使用 1 个 cpu 和 1 个线程的服务器,同时 100% 使用 FFmpeg,它不会减慢网站的其余部分吗?
-
这就是
nice的用途。如果其他进程正在运行,使用nice降低进程的优先级将使其“让开”;除非没有其他需要运行,否则它不会使用 100% 的 CPU。 -
@duskwuff 使用 ffmpeg 和 php 运行良好的正确方法是什么?当我执行“nice -19 -- ffmpeg ...”或“nice -19 ffmpeg ...”时,它会给出相同的空白输出。