PHP セッションのクリーンアップが失敗します

Created:

2016-11-16 13:15:26 UTC

Modified:

2017-08-16 18:36:17 UTC

2

Was this article helpful?


Have more questions?

リクエストを送信

PHP セッションのクリーンアップが失敗します

Applicable to:

  • Plesk 10.x for Linux
  • Plesk 12.5 for Linux
  • Plesk 11.x for Linux
  • Plesk 12.0 for Linux

症状

この記事は RPM ベースの OS が対象です。

  1. PHP セッションが含まれるフォルダに多数のファイルが含まれています。

    ~# ls -l /var/lib/php/session | wc -l
    1139718
  2. /etc/cron.hourly/plesk-php-cleanuper を実行すると、CPU 使用率が 100% に増加します。

  3. すべての実行中 PHP セッションプロセスの検索を試みると、以下のエラーで失敗します。

    ~# [ -x /usr/lib64/plesk-9.0/maxlifetime ] && [ -d /var/lib/php/session ] && find /var/lib/php/session -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib64/plesk-9.0/maxlifetime) ! -execdir fuser {} \\; -delete
    Cannot open a network socket.
    Cannot open /proc directory: Too many open files
    fuser: error while loading shared libraries: libc.so.6: cannot open shared object file: Error 24
    find: Failed to save working directory in order to run a command on `sess_fch2h2dm7s73t0g09r3dmepdp0': Too many open files

原因

スクリプト plesk-php-cleanuper に ' ! -execdir fuser {} \\ という文字列が含まれています。これは /var/lib/php/session ディレクトリ内のすべてのファイルを開き、実行中のプロセスで使用されておらず削除可能であるかどうかをチェックします。ところが、オープンファイルの最大数はデフォルトで 1024 に設定されています。

解決策

  1. ディレクトリ /var/lib/php/session のファイルサイズをチェックします。
    # du -h /var/lib/php/session
    328M /var/lib/php/session

ディレクトリファイルサイズが 1 MB を超える場合、再作成する必要があります。

    # rm -rf /var/lib/php/session
# mkdir /var/lib/php/session
# chmod 1733 /var/lib/php/session/

ディレクトリファイルサイズが 1 MB 以下の場合、以下を実行します。

  1. チェッカーを使用せず、このスクリプトを使用して /var/lib/php/session をクリアします。

    ~# [ -x /usr/lib64/plesk-9.0/maxlifetime ] && [ -d /var/lib/php/session ] && find /var/lib/php/session -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib64/plesk-9.0/maxlifetime) -delete
  2. オープンファイルの上限を、必要な値に増加します。オープンファイルの最大数を取得するには、以下を実行します。

    ~# ulimit -a
    open files (-n) 1024

    /etc/cron.hourly/plesk-php-cleanuper に " ulimit -n 30480 " を追加します。

    ~# cat /etc/cron.hourly/plesk-php-cleanuper
    #!/bin/sh
    ulimit -n 30480
  3. 必要な Cron ジョブを再実行し、正常に完了することを確認します。

他にご質問がございましたら、リクエストを送信してください
ログインしてコメントを残してください。