オペレーティングシステム
仮想記憶
- Servletシステム全体をオンメモリに置くことができる実メモリを確保する
- プロセスサイズが大きくなった時に,実メモリが足りないと仮想記憶部分でもスラッシングが発生する
- 大幅な速度低下
- ページング回数の増大
- リクエストのタイムアウト
- ヒープの拡張に伴ってプロセスサイズが変化するので,スラッシングが発生して遅くなった後はプロセスサイズがいきなり減少するので,見逃さないように注意する.
- 世代別コピー式GCは,仮想記憶と相性が良い
- メモリアクセスのローカリティが向上する
- ページのヒット率が高い
- 他の目的に実メモリを使用できる
Solarisのファイルキャッシュの問題
- Solarisでは,余った実メモリにファイルがキャッシュされる.
- プロセスサイズが大きいと,ファイルキャッシュのためにプロセスがスワップアウトされることがある→スラッシングの発生
- Solaris 2.6〜2.7では,プライオリティ・ページングを使用して,Servletシステムがスワップアウトされないようにする
- Solaris 2.6 (PatchID 103640-25以上のカーネルパッチが必要)
- Solaris 2.6 (PatchID 105181-09以上のカーネルパッチが必要)
- Solaris 2.7
- Solaris 2.6〜2.7の設定方法
- /etc/systemファイルに"set priority_paging=1"という行を追加する.
- /etc/systemファイルに"set cachefree=ページ数"という行を追加する.
- ページサイズはpagesizeコマンドで求められる.
- Solaris 2.8からは新しいキャッシュアーキテクチャが採用されたので,これらの設定をおこなってはいけない.
DNS
- DNSを検索するコストは比較的大きい.
-
- 対策: DNSを検索しない.
- アクセスログに,IPアドレスで書き込まれるので,リアルタイムにモニタしにくい.
- javax.servlet.http#getRemoteHost()が常にIPアドレスを返す.
- 後からアクセスログを集計する時に,非常に時間が掛かる.
- Apacheの場合には,httpd.confで"HostnameLookups Off"と設定する.
- 対策: キャッシュ用DNSを運用する.
Solarisのnscd (Name Service Cache Daemon)の問題
- nscdはDNSリクエストをキャッシュするデーモンプロセスである.
- 問題: nscdはDNSリクエストを直列化する→
複数のプロセスやスレッドが並行にDNSリクエストを発行する場合には性能が低下する.
- 対策: /etc/nscd.confで,"enable-cache hosts no"と設定する.
- nscdを完全に停止してはいけない.