httpd(+php) で SEGV
CentOS7 上で動いている httpd が、ログローテーションに伴う再起動時に
落ちていました。"[abrt] full crash report" というタイトルのメールが
管理者宛に来ていたので見てみると、以下のようになっていました(抜粋)。
core_backtrace: :{ "signal": 11 :, "executable": "/usr/sbin/httpd" :, "stacktrace": : [ { "crash_thread": true : , "frames": : [ { "address": 139643714280712 : , "build_id_offset": 25144584 : , "function_name": "profile_free_file_data" : , "file_name": "/usr/lib/oracle/12.1/client64/lib/libclntsh.so.12.1" : }
心当たりがあったので、/etc/php.d/{oci8, pdo_oci}.ini を呼ばれないように
リネームしてから httpd を再起動しました。現在は順調に動いています。
なお、当該ホストでは Oracle へのアクセス機能は使っていません。
問題のあった環境では、(他ホストとの環境統一の兼ね合いで)oci8 と
pdo_oci を入れていました。oci8 は pecl 経由で導入し、pdo_oci は
オレオレです。
http://php.net/manual/ja/oci8.requirements.php
https://github.com/hotta/pdo_oci
また、PHP 本体は以下の yum リポジトリを使わせてもらっていて、常に
本家リリースからあまり間をおかずに php-5.6.x の最新が入るように
なっています。
https://webtatic.com/packages/php56/
(すでに PHP7 系のパッケージもあるみたいです)
Apache がコケた原因は、以下の通りだと推測されます。
普段は ansible 経由で環境を作っているのでその時点の最新が入りますが、
今回は個別に yum update した後の障害でした。
なお、pdo_oci を php でシミュレートする
https://github.com/taq/pdooci
という実装もあるみたいです。どっちがいいのかな。
みなさん、PHP+Oracle の環境って、どうやってメンテしているんでしょうか?
Oracle のライセンスがこんな状態だと、いつまでたっても yum のサポート
対象にはなり得ないんでしょうか。Oracle さんが Instant Client を OSS 化
してくれれば解決?