소비 계획에 azure 대기열 기능을 실행 중입니다. 내 함수는 FFMpeg 프로세스를 시작하므로 매우 CPU를 많이 사용합니다. 대기열에 100 개 미만의 항목이있는 기능을 실행하면 완벽하게 작동합니다. 하늘색은 확장되어 많은 서버를 제공하며 모든 작업이 매우 빠르게 완료됩니다. 한 번에 300 개 또는 400 개의 항목을 처리하기 시작하면 문제가 발생하지만 CPU는 80 %의 사용률에서 약 10 %의 사용률로 천천히 이동합니다. 즉, 10 %의 CPU만으로도 기능이 끝나지 않습니다. 이것은 아래 그림에서 볼 수 있습니다. 누가 CPU 사용률이 더 낮아지면 내 함수가 더 많은 인스턴스를 생성하는지 알 수 있습니까? 미리 감사드립니다 Cuanffmpeg azure 기능 소비 계획 높은 볼륨 요청에 대한 CPU 사용률이 낮음
편집 : 함수 만 인스턴스 당 한 번에 하나씩 실행으로 설정하지만, host.json
편집에 인스턴스 당 2 ~ 3 동시 프로세스로 설정하면 문제가있는 경우 : CPU 방울이 15-20 개 서버에서 눈에 띄게 나타나 약 60시에 오류가 발생하기 시작합니다. 그 후 CPU는 개인이 0-3 %에 도달하면서 평균 8-10 %로 떨어지고 서버 수는 제한없이 증가합니다 서버가있는 CPU가 있으면 더 도움이 될 것입니다.)
다시 한번 감사드립니다.
도움이 될 수 있도록 기능 코드를이 게시물 하단에 추가했습니다.
using System.Net;
using System;
using System.Diagnostics;
using System.ComponentModel;
public static void Run(string myQueueItem, TraceWriter log)
{
log.Info($"C# Queue trigger function processed a request: {myQueueItem}");
//Basic Parameters
string ffmpegFile = @"D:\home\site\wwwroot\CommonResources\ffmpeg.exe";
string outputpath = @"D:\home\site\wwwroot\queue-ffmpeg-test\output\";
string reloutputpath = "output/";
string relinputpath = "input/";
string outputfile = "video2.mp4";
string dir = @"D:\home\site\wwwroot\queue-ffmpeg-test\";
//Special Parameters
string videoFile = "1 minute basic.mp4";
string sub = "1 minute sub.ass";
//guid tmp files
// Guid g1=Guid.NewGuid();
// Guid g2=Guid.NewGuid();
// string f1 = g1 + ".mp4";
// string f2 = g2 + ".ass";
string f1 = videoFile;
string f2 = sub;
//guid output - we will now do this at the caller level
string g3 = myQueueItem;
string outputGuid = g3+".mp4";
//get input files
//argument
string tmp = subArg(f1, f2, outputGuid);
//String.Format("-i \"" + @"input/tmp.mp4" + "\" -vf \"ass = '" + sub + "'\" \"" + reloutputpath +outputfile + "\" -y");
log.Info("ffmpeg argument is: "+tmp);
//startprocess parameters
Process process = new Process();
process.StartInfo.FileName = ffmpegFile;
process.StartInfo.Arguments = tmp;
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.WorkingDirectory = dir;
//output handler
process.OutputDataReceived += new DataReceivedEventHandler(
(s, e) =>
{
log.Info("O: "+e.Data);
}
);
process.ErrorDataReceived += new DataReceivedEventHandler(
(s, e) =>
{
log.Info("E: "+e.Data);
}
);
//start process
process.Start();
log.Info("process started");
process.BeginOutputReadLine();
process.BeginErrorReadLine();
process.WaitForExit();
}
public static void getFile(string link, string fileName, string dir, string relInputPath){
using (var client = new WebClient()){
client.DownloadFile(link, dir + relInputPath+ fileName);
}
}
public static string subArg(string input1, string input2, string output1){
return String.Format("-i \"" + @"input/" +input1+ "\" -vf \"ass = '" + @"input/"+input2 + "'\" \"" + @"output/" +output1 + "\" -y");
}