私はpdfをマージしています。これらのファイルは 100 を超える可能性があります。今の問題は、私のサーバーには しかありません1 GB RAM
。これらのマージが実際に開始されるとサーバーがハングします。このプロセスはジョブで動作しています。4 GB の RAM を持つ私のローカルホストでは問題なく動作します。最初に聞きたいのは、このプロセスを最適化して、メモリが一度に使用されないようにする方法です。ロジックで何か間違ったことをしている可能性があります。もしあればそれを特定してください
handle()
Job関数内に記述されたコードは次のとおりです
$pdfMerger = new PdfMerger();
$bulk_pdf = public_path('bulk-pdf-consignment/manifest' . $this->manifest_id . '_.pdf');
$allFilesPath = public_path('bulk-pdf-consignment/manifest_' . $this->manifest_id);
// if (File::exists($bulk_pdf)) {
// $pdfMerger->addPDF($bulk_pdf, 'all');
// }
$filesInFolder = collect(File::files($allFilesPath))->sortBy(function ($file) {
return $file->getCTime();
});
$arr = [];
$filesCount = 0;
foreach ($filesInFolder as $path) {
$file = pathinfo($path);
$finalPath = $file['dirname'] . '/' . $file['basename'];
$added = $pdfMerger->addPDF($finalPath, 'all');
if ($added) {
array_push($arr, $finalPath);
}
$filesCount++;
}
$merged = $pdfMerger->merge("file", $bulk_pdf);
if ($merged) {
$url = Storage::disk('s3')->url('bulk_pdf_consignments/manifest' . $this->manifest_id . '_.pdf', fopen($bulk_pdf, 'r+'));
Notification_Helper::sendNotification($this->user_id, 'Download Bulk Print Label PDF'.$filesCount, $url,$this->user_type);
if ($this->user_type == 'staff') {
$user = Staff::find($this->user_id);
}
if ($this->user_type == 'customer') {
$user = Contact::find($this->user_id);
}
sendEmail($user->email, 'Manifest Consignment Labels PDF ', $url, $attachment = null);
File::delete($bulk_pdf);
File::deleteDirectory($allFilesPath);
foreach ($arr as $file) {
File::delete($file);
}
}
2 番目の質問は、RAM を 1GB に減らして localhost でテストできますか?