スケジュールされたキューを使用して、NextcloudプレビューのCPUスパイクを抑制する

プレビュー作成中に Nextcloud サーバーの CPU 使用率が急上昇する場合、多くの場合、ワークロードが一気に発生しています。これは、ユーザーが画像が大量に含まれるフォルダを開いたり、大規模なライブラリのインデックス作成が行われたり、プレビュー処理でユーザーが必要とするサイズよりも多くのプレビューを生成しようとしたりすることが原因です。Nextcloud のプレビュー生成アプリをインストールし、新規ファイルや変更されたファイルを制御されたスケジュールで処理させ、不要なプレビューサイズを削減してください。これにより、処理が混雑しているブラウジングセッションからワークロードが分散されますが、画像変換が無料になるわけではなく、最初の追いつき処理のワークロードがなくなるわけでもありません。

これらの手順は、プレビュージェネレーターのREADMEと、2026年10月10日に確認されたNextcloud 35のドキュメントに基づいています。Nextcloudアプリストアで、ご使用のリリースとの互換性を確認してください。READMEには、暗号化されたファイルはサポート対象外と記載されています。

プレビュー生成がCPU使用率を上昇させるのはなぜか?

Nextcloudは、プレビューが既に存在しない限り、ユーザーのリクエストに応じてサムネイルを作成します。画像のデコード、サイズ変更、変換(特に元の画像が大きい場合や、複数の変換先サイズの場合)は、CPUとメモリを大量に消費する可能性があります。リクエストが集中すると、これらの処理がインタラクティブな使用と同時に表示されることがあります。

プレビュージェネレーターは、新規または変更されたファイルをバックグラウンド処理用にキューに追加します。既存のプレビューは配信コストが低くなりますが、不足しているプレビューは引き続きNextcloudのオンデマンドパスを使用します。このアプリは一部の処理を比較的負荷の低い時間帯に振り分けますが、全体の処理量を削減したり、ビデオ変換やストレージの低速といった他のボトルネックを解消したりすることはできません。

制御されたプレビューキューを設定する

1. バックグラウンドジョブモードとアプリの互換性を確認する

管理設定で、バックグラウンドジョブを確認してください。プレビュージェネレーターの組み込みジョブはCronモードを必要とします。READMEには、この長時間実行ジョブではAJAXとWebcronはサポートされていないと記載されています。Nextcloudはシステムcronの使用を推奨しています。管理ページでCronが報告されていることを確認してください。

アプリ画面からプレビュージェネレーターをインストールするか、デプロイメントでOCCを使用し、アプリのインストールが許可されている場合は、Nextcloudのインストールディレクトリから以下のコマンドを実行してください。DebianまたはUbuntuでは、Webサーバーアカウントは通常 ですwww-data。ホストの実際のHTTPユーザーとPHP CLIバージョンを使用してください。

sudo -u www-data php /var/www/nextcloud/occ app:install previewgenerator
sudo -u www-data php /var/www/nextcloud/occ app:enable previewgenerator

既にインストールされている場合は、最初のコマンドをスキップしてください。ステータスと使用可能なコマンドを確認してください。

sudo -u www-data php /var/www/nextcloud/occ app:list
sudo -u www-data php /var/www/nextcloud/occ list preview

OCCをHTTPユーザーとして実行することで、ファイルの所有権が維持されます。パスとユーザーはデプロイメントによって異なります。NextcloudのOCCドキュメントを参照してください。

2. 大規模な世代実行を開始する前にプレビューバリアントを削減する

プレビュージェネレーターは、設定されたサイズで正方形のサムネイルとアスペクト比のプレビューを作成できます。READMEには、サイズは4のべき乗でなければならず、空の値を指定するとそのプレビューカテゴリはスキップされると記載されています。負荷の高いサーバー向けの、制限された初期プロファイルを以下に示します。このプロファイルでは、小さな正方形のタイルと2つのアスペクト比サイズが保持され、幅のみと高さのみの個別のバリアントはスキップされます。

sudo -u www-data php /var/www/nextcloud/occ config:app:set --value="64 256" previewgenerator squareSizes
sudo -u www-data php /var/www/nextcloud/occ config:app:set --value="256 1024" previewgenerator fillWidthHeightSizes
sudo -u www-data php /var/www/nextcloud/occ config:app:set --value="" previewgenerator widthSizes
sudo -u www-data php /var/www/nextcloud/occ config:app:set --value="" previewgenerator heightSizes

この低負荷プロファイルはすべてのアプリに当てはまるわけではありません。アプリによっては、より大きなプレビューや他の形状が必要になる場合があります。サムネイルが表示されない場合や、サムネイルがぼやけている場合は、必要なビューを特定し、そのサイズだけを追加してください。サイズが大きいほど、処理能力とキャッシュの使用量が増加します。ファイル、写真、アクティビティのREADMEで推奨されている最小サイズは、より大きな4096ピクセルです。お使いのハードウェアでそのトレードオフを評価してください。公式のプレビュージェネレーターのREADMEを参照してください。こちらはより大きな4096ピクセルのアスペクト比サイズを使用しているため、お使いのハードウェアでそのトレードオフを評価してください。

とpreview_max_xのpreview_max_y設定は、config/config.php全体的なピクセル数の上限を定めています。編集する前にファイルをバックアップし、選択したアプリのサイズと互換性があるようにしてください。プレビューを無効にすると、アプリ全体でサムネイルが削除されます。

3. アプリの事前生成コマンドをワーカーを重複させずにスケジュールする

小規模サーバーの場合、Cronモードが有効になっている限り、組み込みのキューワーカーで十分です。デフォルトのジョブは実行ごとに最大5分に制限されており、アプリは監視用のキュー統計情報を提供します。予測可能なオフピーク時間帯が必要な場合は、代わりにシステムcronの専用OCCコマンドを使用してください。カスタムスケジュールを使用する場合は、両方のメカニズムが競合しないように、アプリのデフォルトのキュージョブを無効にしてください。

sudo -u www-data php /var/www/nextcloud/occ config:app:set --value=true --type=boolean previewgenerator job_disabled

次に、Webサーバーユーザー(sudo crontab -u www-data -e)のcrontabを編集し、次のようなスケジュール例を追加します。

*/10 * * * * php -f /var/www/nextcloud/occ preview:pre-generate

10分というのはあくまで一例です。トラフィックと容量に合わせて実行間隔と時間枠を選択し、PHPとOCCのパスを確認してください。このコマンドを他の場所でスケジュールしないでください。cron.php他のバックグラウンドタスクを実行するNextcloudの定期ジョブはそのまま残しておいてください。システムcronの設定については、Nextcloudのバックグラウンドジョブガイドを参照してください。

4. 制御不能な最初の追い上げを避ける

READMEにpreview:generate-allは、インストール後に既存のファイルをスキャンするように指示されています。大規模なライブラリでは、この追いつき実行によってCPU使用率が大幅に上昇する可能性があります。ビジー状態のサーバーで多数のワーカーを実行することは避けてください。処理が静かな時間帯に、ユーザーまたはパスを1つだけ指定して実行を開始し、CPU、メモリ、ディスクスループット、空き容量を監視してください。このコマンドは、ユーザーID、パス、ワーカー数をサポートしています。まずはワーカーを1つ指定してください。必要に応じて、スキャンを複数のウィンドウに分割してください。

負荷が予測可能になっていることを確認する

コマンド実行後、キューを確認してください。

sudo -u www-data php /var/www/nextcloud/occ preview:queue-stats

キューの統計情報には、古いプレビューも含まれます。バックログが減少し、スケジュールされた作業で終了するCPUピークは、キューが進行していることを示します。代表的なフォルダを開いてサムネイルを確認し、通常のブラウジングを観察してください。同様のトラフィックレベルでCPUを比較すると、ゼロになることはありません。

キューが縮小しない場合は、cronログを確認し、preview:pre-generate -vv処理されたファイルを確認するために、実行時間を制限してください。キューがクリアされた後もCPU使用率が高いままの場合は、他のPHPワーカー、ジョブ、またはメディアサービスを調査してください。プレビューがディスクを過剰に使用している場合は、未使用のサイズを削除するか、サイズを小さくしてください。残りのプレビューが、ユーザーが必要とするビューをサポートしていることを確認してください。

公式資料

コメントを残す

スケジュールされたキューを使用して、NextcloudプレビューのCPUスパイクを抑制する

サムネイル作成作業を制御されたバックグラウンドスケジュールに移行し、使用されていないプレビューサイズをトリミングし、Nextcloudサーバーに過負荷をかけることなくキューを検証します。

Nextcloudデスクトップ同期で「ファイルの処理中」を解消しましょう

Nextcloudの同期を妨げているファイル、除外ルール、接続の問題、またはクライアントデータベースの状態を特定し、アップロードとダウンロードが安全に行われることを確認します。

適切な制限値を調整して、Nextcloud OPcache の警告を解消する

Nextcloudの警告を引き起こしているPHP OPcacheの制限値を特定し、適切なWeb PHP設定を更新し、安全に再起動して、結果を確認してください。

NextcloudをCODE Dockerに接続する:セットアップとトレードオフ

NextcloudをCODE Dockerに接続する:セットアップとトレードオフ

組み込みのCODEとDockerベースのCODEを比較し、安全なHTTPSリバースプロキシを介してCollabora OnlineをNextcloudに接続します。

Galeraを使用して、回復力の高いNextcloudクラスターを構築する

共有ストレージ、Redisロック、クォーラム対応MariaDBルーティング、および実用的なフェイルオーバーチェックを備えた、信頼性の高いNextcloud HAデプロイメントを計画します。

Direct Mediaが失敗した場合にNextcloud Talkの通話を繋ぐ方法

Direct Mediaが失敗した場合にNextcloud Talkの通話を繋ぐ方法

ファイアウォールや制限的なNATによって直接通話メディアがブロックされる場合に、Nextcloud Talk用の到達可能なTURNリレーを設定および検証します。

適切なファイルを復元してNextcloudの整合性警告を解消する

無効ファイルレポートを使用して、変更された、欠落している、または余分な Nextcloud コードを特定し、信頼できるファイルを安全に復元し、結果を確認します。

OAuth2を使用してGmailまたはMicrosoft 365をNextcloudメールに接続する

Nextcloud MailでGmailまたはMicrosoft 365を使用してOAuth2を設定し、送受信を確認し、一般的な同意エラーやSMTPエラーを解決します。

OCCを使用してNextcloudのメンテナンスモードを安全に解除します。

OCCを使用してNextcloudのメンテナンスモードを安全に解除します。

OCCを使用してNextcloudへのアクセスを復元し、データベース移行のステータスを確認し、アーカイブ、Docker、またはSnapのインストールに適したコマンドを選択します。

Nextcloud LDAPとActive Directoryログインの設定

NextcloudをLDAPまたはActive Directoryに接続し、ユーザーおよびグループフィルタを使用してアクセスを制限し、展開前に安全な認証を検証してください。