Centos

CentOS VPS 上的 PHP exec“無法分叉”間歇性錯誤

  • July 1, 2014

使用:

PHP 5.5.10
nginx 1.5.10
Centos 6.5

a xen-based 4GB VPS

我的網站使用加密的貝寶按鈕。此加密由以下程式碼完成:

$openssl_cmd = "($OPENSSL smime -sign -signer $MY_CERT_FILE -inkey $MY_KEY_FILE " .
              "-outform der -nodetach -binary <<_EOF_\n$data\n_EOF_\n) | " .
              "$OPENSSL smime -encrypt -des3 -binary -outform pem $PAYPAL_CERT_FILE";

exec($openssl_cmd, $output, $error);

現在有幾次(相隔幾天)按鈕開始無法編碼。如果我執行“service php-fpm restart”,那麼一切都很好。

這是給出的錯誤:

PHP Warning:  exec(): Unable to fork [(/usr/bin/openssl smime -sign 
   -signer /var/www/my-pubcert.pem -inkey /var/www/my-prvkey.pem -outform der 
   -nodetach -binary <datasnipped>) | /usr/bin/openssl smime -encrypt -des3 
   -binary -outform pem /var/www/paypal_cert.pem]

一旦它發生,它似乎會不斷發生,直到我重新啟動 php-fpm。

有什麼想法我應該去調試/解決這個問題嗎?

謝謝

PHP 程序很可能在某個時候開始使用大量記憶體(您可以在頂部檢查,按 M 以按記憶體對程序進行排序)。嘗試設置“pm.max_requests = 100”,或者,無論如何,設置一個比你現在擁有的值低得多的值(或者,如果它是 0,大約 100 左右,這意味著無限)。

順便說一句,更好的加密方法是使用 PHP OpenSSL 庫,而不是執行 OpenSSL 的命令行界面。

編輯:

根據您的要求(即使它部分偏離主題),您可以在此處此處找到PHP 中的 2 個 OpenSSL 函式的文件和範常式式碼。您可能需要使用 OpenSSL 支持重新編譯 PHP 或安裝所需的模組(通常它應該內置)。

引用自:https://serverfault.com/questions/586238