アイテムが非常に多いホストを削除できない

お世話になります。
アイテムを1万件以上登録してしまったホストを削除することができません。
厳密には該当ホストを開き、削除ボタン押下後10秒ほど経つと、画面上部のメニューと、画面遷移のヒストリのみが表示されている状態に遷移してしまい、再度該当のホストを見てみると削除されずに残っている、と言う物です。
DB側の性能(mysqlを利用しています)問題も考えましたが、画面の状況からZabbix(厳密にはPHP?)のタイムアウトであろうと指摘を受けました。

その前提でPHP5とApache2の設定を見直してみましたが改善しません。確認したのは以下の項目です。
なお以下の項目変更後も、上記削除実行後状態になるまでの時間は変化しませんでした。

php.ini
max_execution_time = 600

apache2 apache2.conf
TimeOut 300
KeepAliveTimeout 500

zabbix_server.conf
Timeout=30

このホストに登録されたアイテムはローレベルディスカバリを利用しSNMPのMIBを登録しようとして作成されてしまった物で、
個々のアイテムを選択して削除する、という手法が使えない状態です。
関連するタイムアウト設定は変更したと思っているのですが、何か漏れがあるのでしょうか。
見過ごしている部分をご指摘いただければ幸いです。

コメント表示オプション

お好みのコメント表示方法を選び「設定の保存」をクリックすると変更が反映されます。
ユーザー TNK の写真

10秒ほどたつと一部の画面が更新されて表示されているようですが、
その時点で、httpdのCPU使用率は高いままでしょうか?
それとも、httpd上でのPHPアプリケーションも終了してしまってい
るような状態でしょうか?

ユーザー yas の写真

topコマンドで観察してみましたが、削除実行時に高い使用率になり、画面の更新が行われて5秒ほどは
httpd(topコマンド上ではapache2)の使用率が高いままでした。
ただ、定期的に使用率が高くなり低くなる(各種画面更新等の処理だと思われます)を繰り返していますので、
削除実行時の処理だけの要因か、と言う切り分けができていない状態です。

継続して高いままなら終了していないと考えられると思いますが、変動していることから該当の削除処理については
終了している物と考えています。

ユーザー TNK の写真

削除処理が途中で止まって削除処理がキャンセルされたような感じ
ということですね。

PHP側の処理でエラーとなっていると、Apacheのerror_logファイル
に何らかの情報が出力されているかもしれません。
MySQLサーバ側も何らかのログが出力されていないかも確認してみ
てください。

ユーザー yas の写真

apacheのエラーログを確認したところ、
PHP Fatal error: Allowed memory size of xxxxxというログが残っていました。
PHPの使用メモリが足りなくなっていたようなので、memory_limitを変更し再度実行したところ削除できました。
画面が切り替わっていたのでタイムアウトと思っていましたが、PHP自体がエラーを出していたのですね。

基本的なエラーログの確認を怠っていました。
アドバイスありがとうございました。

ユーザー fripper の写真

LLDを利用してアイテムが多数できてしまったとのことですが
以下のようにしてみてはいかがでしょうか?

1.敢えてLLDの設定を「少ししか見つからないもの」に変更
2.見つからなくなった項目の保持期間を「1日」など短期間にする
3.1日放置
4.無効な参照先となったアイテムが削除される
5.Webからホストを削除

1日以上は放置しないといけないので「今すぐに」というわけにはいきませんが
作った本人(server プロセス)に削除させる‥という方法です

ユーザー yas の写真

ありがとうございます、他のレスで書きましたがPHPのメモリ不足が原因でした。

それとはまた別ですが、今回の大量アイテム取得はTemplate SNMP Interfacesを利用して起こりました。
少ししか見つからない物はいくつか思いつきますが、大本の取得したアイテムと違う物を見つけるようにした場合でも、
ディスカバリが参照の無いもの、と認識してくれるのでしょうか?

大本のトラブルは解決したのですが、知識として知っておきたいのです。
ホストのディスカバリは「同じ設定で見つかっている物」で参照先が見つからない場合に削除される、と認識しておりましたので
同じ設定である必要があると思っていました。

ユーザー TNK の写真

やってみてはいないのですが、Template OS Linuxのディスカバリ
で利用しているように、LLDで見つける際にフィルタリングするこ
とができるのではないでしょうか。

ディスカバリのルールの中に、フィルターという項目があると思い
ますが、ファイルシステムであれば、{#FSTYPE}が正規表現のFile
systems for discoveryの条件に合致するものをピックアップする
ようになっています。

同様に、Template SNMP InterfacesのNetwork interfacesという
ディスカバリルールで、マクロとして{#SNMPVALUE}に存在しない
ような正規表現でのフィルタリングを設定すれば、LLDが呼び出さ
れたときに、該当するインターフェイスが存在しないと判断して
くれることを期待しています。

fripperさんが書かれている通り、Network interfacesディスカバ
リルールの「存在しなくなったリソースの保持期間(日)」も短く設
定すれば、存在しないものはより早く削除されるはずです。

ユーザー yas の写真

実際にはやってみないと分からない、と言う事ですね。
今回はうまく削除できたので問題ないのですが、逆に今後ディスカバリで登録する場合に
正規表現でうまく処理できればと思います。
完全にパターン化できれば正規表現を書く事で何とかなると思うのですが、
各ポート名にマクロを入れて、必要時にどこに繋がっている物かを明示するようにしているため、
自動化しても良い物、面倒でも手作業でテンプレート化する物を考えた上で、ちょっと試してみたいと思います。
あまり正規表現が得意で無いので心配ではありますが(^^;。

ありがとうございました。