Centos
CentOS VPS 上的 PHP exec“無法分叉”間歇性錯誤
使用:
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 或安裝所需的模組(通常它應該內置)。