Apache httpdの現在のプロセス数、TCP 接続本数を調べる

ab(Apache Bench) コマンドなどを実行する場合など、HTTP サーバのパフォーマンスの分析を簡易的にしたい場合に、
topなどで監視するのもいいのですが、Apacheが現在何プロセス、何本のコネクションか定期的に監視できると便利です。

今回は毎秒Apacheのプロセス数とHTTP/HTTPS接続本数を調べて結果を出力し続けるというコードを書いてみました。

続きを読む Apache httpdの現在のプロセス数、TCP 接続本数を調べる

pkgdb.rb での Segmentation Fault

[2006-02-01] の portsdb.rb での Segmentation Fault とほぼ同じ現象に再び遭遇。

$ portversion -vL=
—> Checking the package registry database
[Updating the pkgdb <format:bdb1_btree> in /var/db/pkg … – 249 packages found (-2 +0) (…)/usr/local/lib/ruby/site_ruby/1.8/pkgdb.rb:466: [BUG] Segmentation fault
ruby 1.8.4 (2005-12-24) [i386-freebsd4]
 
Abort trap (core dumped)

なんで bdb1_btree 見てるのか、と疑問に思いながらソースコードを追っていくとどうやら、PKG_DBDRIVER という変数を見ているもよう。portsdb では PORTS_DBDRIVER ですが、pkgdb ではこちらを使う、と。PORTS_DBDRIVER と同様、PKG_DBDRIVER も bdb_btree (bdb1_btree)がデフォルトで、これは freebsd5 でも変わっていないようです。

export PKG_DBDRIVER=bdb1_hash
pkgdb -aF

これで対処完了!
 
追記: pkgtools.conf に

ENV[‘PORTS_DBDRIVER’] = ‘bdb1_hash’
ENV[‘PKG_DBDRIVER’] = ‘bdb1_hash’

とするほうが設定がまとまっていいかもです。

今日の Eclipse Plugin

最近ネタがあっても更新してません(。。;)
翻訳プラグイン
リリース当初から知ってたものの、見なかった事にしていたプラグイン^^;
命名の時の手間が減るかなと思い今更に導入。
Update Site: http://www.eisbahn.jp/update-site/
EclipseUML
Free Edition を導入。GEF, EMF がバンドルされ, インストーラ(実行可能なjar形式)での配布で昔に比べてインストールが容易になってました。
普段 Jude Community Edition を使っているのですが、
いまいちコードとの同期が取りづらいのと、UML2.0 に対応していないのが不満だったので..
 
HeapStatus
Eclipse3.2 で標準搭載になった(Eclipse自体の)メモリ使用状況表示, メモリ解放プラグイン。
Update Site: http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/platform-ui-home/updates
追記(2006-07-21): Eclipse3.2 ではデフォルトでヒープステータス表示がオフになっている。「設定→ 一般」の「ヒープステータスを表示」のチェックを入れることで利用可能になります。
 
Commons4E (@IT の記事)
Update Site: http://commons4e.berlios.de/updatesite/
ソロプログラミングプラグイン
これにはまったらきっと病んでる。

モニタリング用プロトコル SNMP を体験するには

– Linux の場合、yum, apt-get などで net-snmp-*.rpm をインストールします。

yum install net-snmp-*.rpm

 
– /etc/snmp.conf でアクセス権を設定する。
次のような設定で全ての情報が参照可能になります。この状態で外部に UDP 160, UDP 161 番ポートを公開すると、誰でもどこからでも同じ情報が参照可能になることに注意してください!!

# 詳細は man 5 snmpd.conf を参照。
# sec.name source community
com2sec notConfigUser default public
# groupName securityModel securityName
group notConfigGroup v1 notConfigUser
group notConfigGroup v2c notConfigUser
group notConfigGroup v3 notConfigUser
# name incl/excl subtree mask(optional)
view all included .1
# group context sec.model sec.level prefix read write notif
access notConfigGroup “” any noauth exact all all all
 
 
syslocation Unknown (edit /etc/snmp/snmpd.conf)
syscontact Root <root@ecoop.net> (configure /etc/snmp/snmp.local.conf)
 
# Added for support of bcm5820 cards
pass .1.3.6.1.4.1.4413.4.1 /usr/bin/ucd5820stat

> /etc/init.d/snmpd start

/etc/init.d/snmptrapd start

でサーバ側は完了です。
監視側は TWSNMP というフリーソフトを使うとお手軽なのでおすすめです。

eAccelerator トラブルシューティング – Can not create shared memory area in Unknown on line 0

Q. Linux + Apache + PHP + eAccelerator の環境で apache が次のエラーを出して動かなくなりました。

$tail -f error_log
PHP Warning: [eAccelerator] Can not create shared memory area in Unknown on line 0
PHP Fatal error: Unable to start eAccelerator module in Unknown on line 0
[Thu Feb 23 09:26:31 2006] [warn] pid file /usr/local/apache_1.3.34/logs/httpd.pid overwritten — Unclean shutdown of previous Apache run?
PHP Warning: [eAccelerator] Can not create shared memory area in Unknown on line 0
PHP Fatal error: Unable to start eAccelerator module in Unknown on line 0

A. このエラーが出た場合、原因はここの次の FAQ に書いてあるケースの可能性があります。

Q: I’m using linux 2.6 kernel and eAccelerator doesn’t get loaded when the shm_size is set to value bigger than 32mb. Php gives this warning:
PHP Warning: [eAccelerator] Can not create shared memory area in Unknown on line 0

A: The default shared memory size for the 2.6 kernel is 32mb. You can change this size by setting /proc/sys/kernel/shmmax to the disired maximum value. You can do this by echo VAL > /proc/sys/kernel/shmmax or add the line kernel.shmmax=VAL to /etc/sysctl.conf so you don’t have to set it manualy every time you reboot.

カーネルの共有メモリ制限(デフォルト32MB)を超えて、eaccelerator.shm_size を設定したのが原因でした。php.ini で

eaccelerator.shm_size=32

のように範囲内に押えるか、あるいは FAQ にあるように

# cat /proc/sys/kernel/shmmax
33554432

を、
# expr 64 “*” 1024 “*” 1024 > /proc/sys/kernel/shmmax
のように、バイト単位で適切に上限を設定してカーネルごとリブートすれば解決します。

OpenLaszlo メモ

■OpenLaszlo デモ:
http://www.laszlosystems.com/partners/support/demos/
■OpenLaszlo 利用についての @IT の記事:
http://www.atmarkit.co.jp/fwcr/rensai/laszlo01/01.html
■採用している例:
http://www.behr.com/behrx/colorsmart/main.jsp
http://www.svcfinancial.com/sol_demo_library2.html
 から辿れるリンク先(view demo とあるもの)。
 
■その他採用サイト一覧:
http://www.laszlosystems.com/customers/case/
■OpenLaszlo でビジネス展開している日本の会社:
http://www.net8.co.jp/

CSS バグ辞典

http://members.at.infoseek.co.jp/cssbug/index.html
特に IE について、けっこうな量の不具合があるのだなぁと改めてびっくりです。
例えば vertical-align 周りの動作の怪しさはずっと気になっていたので、検証コードで確認できてすっきりしました。
参考:
CSS テクニックコミュニティ(mixi)

Apache パフォーマンスチューニング

パフォーマンスのために必要なモジュールを削る、とか、DSO をやめる、というのは各所で書かれていますが、あんまり例がなかったので書いておきます。

/configure –prefix=/usr/local/apache \
    –disable-module=all \
    –enable-module=access \
    –enable-module=log_config \
    –enable-module=dir \
    –enable-module=mime \
    –enable-module=auth \
    –enable-module=status

もう一件、Apach 1.x における MaxClients の限界ですが、

src/include/httpd.h:
#ifndef HARD_SERVER_LIMIT
#ifdef WIN32
#define HARD_SERVER_LIMIT 1024
#elif defined(NETWARE)
#define HARD_SERVER_LIMIT 2048
#else
#define HARD_SERVER_LIMIT 256
#endif
#endif

という部分で、HARD_SERVER_LIMIT が MaxClients に設定する値以上になるように編集してやればいいです。
参考:
Apacheパフォーマンス・チューニングの実践(@IT)
ステップバイステップでApacheをセキュアに(愛の死体安置所)
セキュリティの話ですが、必要なモジュールを削る際に参考になります。
Apache1.3.33+PHP4.3.10 (cubic9.com)
外部モジュール(サイトにあるのは PHP4)を静的に組み込む例。
configure –help にある、

 –add-module=FILE on-the-fly copy & activate a 3rd-party Module
–activate-module=FILE on-the-fly activate existing 3rd-party Module

という設定ですね。

 –activate-module=src/modules/php4/libphp4.a

みたく、リンクライブラリを指定するとそれを一緒にビルドしてくれます。
追記 (2006-02-22):
PHP4 + Apache1.3 チューニング
Apache設定ファイルをチューニング