PHP Warning: include(): Unable to allocate memory for pool.


久しぶりにある社内テストサーバーのエラーログを確認してみると

PHP Warning: include(): Unable to allocate memory for pool.
PHP Warning: include(): Unable to allocate memory for pool.
PHP Warning: include(): Unable to allocate memory for pool.

大量のエラーメッセージを出力しまくっているではないか!

誰だ!変なモジュールをインストールしたのは?先日までエラーメッセージは正常だったはずなのに。

apache、PHP周りでいくつかのライブラリーを外していろいろと確認してみる。

どうやらapc(PHPキャッシュ)が関係している感だ。

アクセスが激しいサイトはapcをインストールすると、かえって余計な負荷がかかるので

個人的に嫌いだ。そんなわけで、アンインストール。

しかし誰だ!私の知らないうちにapcを導入したのは・・・

カーネルパニック 長時間のサーバーダウンを回避する方法


初めまして、株式会社マイスタンダード 新入社員(4月)のテツと申します。

学校も卒業し、今季より入社することになりました。

まだまだ、技術的にひよっこレベルですが、何とか先輩方のお力になれるよう

日々精進してまいります。



サーバーについては、自宅でホームサーバーを構築したりいろんなサービス

特に学生に人気だったクラウド的なネットワークストレージは

知識ありありです。

ホームサーバーについて、カーネルパニック、停電などでダウンしても誰も

文句をいいません(僕だけ文句言いますが)。

が、ビジネスとしてはサーバーのダウン時間が長ければ長いほど

ビジネス機会を損失しかねません。

1秒でも早く復旧したいところです。

そこで、カーネルパニックの際の設定で、自動的にリブートする設定にしておくと

夜中などのサーバーダウン時にも、無人で対応することができるようになります。

先輩教えていただいてありがとうございます。

そうなんです、自宅のホームサーバーでカーネルパニックになって、キーボードの入力などを

受け付けたり、本当にダウンしているのか?疑問に思っていました。

この間に、再起動できるんですね。

もちろん、自動起動にしていても、後から原因となるログを確認することができます。

Wndowsでは考えられない機能ですね。


「カーネルパニック時の自動再起動の設定方法」

▼編集
# vi /etc/sysctl.conf

~~~~~~~~~~~~~~~
▼追加
kernel.panic = 5
~~~~~~~~~~~~~~~

▼設定反映
# /sbin/sysctl -p

▼確認
# /sbin/sysctl kernel.panic

apache2.4.1はnginxより高速で早い 最新WEBサーバー構築


apache2.4.1が正式にリリースされ、いろいろなサイトからベンチマークがチラホラ出てき始めています。

実際に自分でもベンチマークしたわけではないので具体的な数値は分かりませんが

幾つかのサイトをまとめると、apache2.4.1はnginxより早い結果になっている感じをうけます。

apache2.4.1を導入すれば、既存の負荷がかかっているサイトなら

直ぐに効果が確認できると思います。

弊社でもテストサービスがガンガンに動作しているサーバーを、apache2.4.1へ変更したとたんに

リソースが和らいだのを確認しております。

導入して数日経過しますが、現状問題無く動作もしております。

が、apache2.4.1は、導入(コンパイル、インストール)段階でいくつかの問題を抱えていたり、起動したように見えて

実際はエラーで起動しておらずなどのトラブルも他のスタッフから聞いたりしました。

opensslなどと相性が悪いのかな?

後は、これに先日メジャーバージョンアップしたPHP5.4をセットにすれば、最新のWEBサーバー構築を楽しむことができそうですね。

ntpdateの実行後にdovecotがプロセス終了している不具合


とあるサーバーでdovecotのプロセスが終了してるのが、短い間で連続して起きた。

dovecotの原因で、有名な時間の誤差問題?

ntpdateの実行後に、決まってdovecotが終了している。(間違いありません)

ntpdateを1日一回実行しているんですが、そんなに誤差はでますの?

ntpdで誤差の発生を抑えるのもいいかもしれませんが、デーモンを起動するまでは・・・

ntpdateの実行を1日3回にしてみて様子見です。

後、monitでdovecotのプロセスを監視し、プロセスがダウンしているようだと自動で起動してくれるサービスを導入するのもいいかもしれません。

復旧後はメールで教えてくれるので便利です。

PHP5.4.0のリリースと変更点・注意点そして速度


PHPがこの春!メジャーバージョンアップして5.4.0としてリリースされました。

幾つか機能の追加、変更、削除があります。

そのままバージョンアップしても問題なく動作すると記載されていますが、変更点を確認してみると

気になる箇所もちらほら見受けられます。

速度的には5.3と比べると約4倍高速になっているみたいです。これは期待できますね。

後、時代なんでしょうか?CLIの独自WEBサーバー機能があります。

なんか脱apacheぽい動きが業界にあるのかもしれない・・・


[下位互換性のない変更点]
セーフモード をサポートしなくなりました。セーフモードでの動作を前提とするアプリケーションは、 セキュリティに関する調整が必要となります。
マジッククォート が削除されました。 この機能に依存するアプリケーションは、依存しないように修正しないとセキュリティの問題が発生します。 get_magic_quotes_gpc() と get_magic_quotes_runtime() は常に FALSE を返すようになりました。set_magic_quotes_runtime() を実行すると E_CORE_ERROR が発生します。
ini 設定 register_globals と register_long_arrays が削除されました。
呼び出し時の参照渡しをサポートしなくなりました。
break と continue への引数として、変数は使えなくなりました。つまり、 break 1 + foo() * $bar; などとは書けなくなったということです。 静的な引数を使うのはもちろん可能で、break 2; などは使えます。
Date 拡張モジュールにおいて、TZ 環境変数によるタイムゾーンの設定をサポートしなくなりました。 php.ini 設定 date.timezone あるいは date_default_timezone_set() 関数でタイムゾーンを指定しなければなりません。 デフォルトのタイムゾーンが設定されていない場合に推測することがなくなり、 未設定の場合は常に “UTC” とみなして E_WARNING を発生させるようになりました。
$a が文字列の場合に非数値のオフセット (たとえば $a[‘foo’]) を指定したときに、isset() の返り値は false、 そして empty() の返り値は true となりました。 そして同時に E_WARNING が発生します。オフセットに double や bool そして null を指定した場合は E_NOTICE が発生します。数値とみなせる文字列を渡した場合 ($a[‘2’] など) の挙動はこれまでと変わりません。 ‘12.3’ や ‘5 foobar’ のようなオフセットは非数値とみなされて E_WARNING が発生しますが、過去との互換性のためにそれぞれ 12 および 5 に変換されることに注意しましょう。
配列を文字列に変換しようとすると E_NOTICE が発生するようになりました。 キャストの結果は “Array” で、以前と変わりません。
NULL、FALSE あるいは空文字列にプロパティを追加してオブジェクトに変換しようとすると、 これまでのような E_STRICT エラーではなく warning が発生するようになりました。
スーパーグローバルをパラメータ名として使うと fatal error となります。つまり function foo($_GET, $_POST) {} などのコードは使えなくなります。
ハッシュアルゴリズム Salsa10 および Salsa20 が削除されました。
array_combine() のパラメータとして空の配列を二つ指定したときの返り値が FALSE ではなく array() となりました。
htmlentities() は、アジアの文字に対して使ったときに E_STRICT を発行するようになりました。この場合の htmlentities() の挙動が htmlspecialchars() (こちらは以前からそうなっていた) と同じになりました

[新機能]
トレイトのサポートが追加されました。
配列の短縮構文が追加されました。$a = [1, 2, 3, 4]; や $a = [‘one’ => 1, ‘two’ => 2, ‘three’ => 3, ‘four’ => 4]; のように使えます。
foo()[0] のように、関数の返り値を配列として扱えるようになりました。
クロージャ が $this をサポートするようになりました。
クラスのインスタンスを生成するときに、そのメンバーにアクセスできるようになりました (例: (new Foo)->bar())。
Class::{expr}() 構文をサポートするようになりました。
二進数フォーマットが追加されました。0b001001101 のように使えます。
パースエラー時のパーサからのメッセージや関数コール時の引数が間違っている場合の警告メッセージが改善されました。
セッションモジュールで、ファイルのアップロード状況を追跡できるようになりました。
CLI モードで動く、開発用のウェブサーバ が組み込まれました。