Akira's Tech Notes

Java/JVM | GNU/Linux | Emacs/Lisp | 知的好奇心駆動

header-icon
ネイティブでない日本語で思い付くことや気になることをダラダラ書く、体裁とかは気にしない。読みづらいと感じた時に随時更新する。

[メモ]VirtualBox HostOnly on Linux

VirtualBox上で動く仮想マシンにデフォルトではNATネットワークアダプタが割り当てられてい るため、Host OSとの通信ができないです。これを回避するために ホストオンリーネットワー ク アダプターを使えば回避できる。最近のバージョン追加手順が変わったため、メモしてお きます。

[メモ]自宅サーバディスク増設記録

半年前、約1年ちょっと使った WD Blue(WD10EZEX) ディスクが壊れた (I/Oスピードが激遅い現 象が起きた)ため、RMA保証手続きで交換しました。交換で約1ヶ月かかる、かつサーバがRAID0構 成のため、代用品を購入し、復旧を実施した。RAM交換で届いたディスクがずっと置いたまま、 今日もう一台のNASサーバに増設を実施します。

[メモ]CMS GCログの見方

1 基本おさらい

CMSとは Concurrent Mark & Sweep 、JVM OLD領域GC処理アルゴリズムの一種です。 CMSはアプリケーションを停止する時間を削減することが出来ます。処理の流れは下図に示す。

※Concurrentは同時という意味です。

       ①        ②          ③    ④
---> | ==> | ============> | ==> | ==========> ----->
---> |     | ------------> | ==> | ----------------->
---> |     | ------------> | ==> | ----------------->
---> |     | ------------> | ==> | ----------------->
---> |     | ------------> | ==> | ----------------->
---> |     | ------------> | ==> | ----------------->
       STW                   STW

凡例
+--------------------+
| ==> GCスレッド     |
| --> アプリスレッド |
+--------------------+

図上示している通り、①と③の処理だけアプリケーションが停止する。

Initial Mark STW Rootを起点に利用されてるオブジェクトをマークする
②-1 Concurrent Mark   ①でマークされたオブジェクトを起点に使用中のオブジェクトをマークする
②-2 Concurrent precleaning   ②-1処理中アプリによる生じた変化部分をマークする、③の処理時間を短縮するため
Parallel Remark STW ②処理中アプリによる生じた変化部分をマークする
④-1 Concurrent Sweeping   マーク処理によって判明した使用済みオブジェクトを削除する
④-2 Concurrent Reset   CMS処理自体のリセット

[メモ]ApacheでbackendとのKeepAliveをOFFにする

次のような構成でApacheとAPサーバ間のHTTP KeepAliveが有効にすると

  1. LBの振り分けが偏る可能性がある
  2. LBの無振り分け先の切り替えに影響が生じる可能性がある、詳細は こちらの記事 を参照してください。

のような不都合があります。

+----------+         +------------+        +-----------+     +-------------+
| Client   +---------> Apache     +-------->   LB      +-----> AP Server   |
+----------+         +------------+        +-----------+     +-------------+

とい言うわけでApacheとAPサーバ間KeepAliveをOFFにする方法を調査した。

[調査]JBossAS7のソケット操作タイムアウト値について

JBossAS の起動オプション org.apache.coyote.http11.DEFAULT_CONNECTION_TIMEOUT につい て誤解があったので、メモしておきます。

まず、ドキュメントの説明。デフォルトタイムアウト値が60秒ですね。

org.apache.coyote.http11.DEFAULT_CONNECTION_TIMEOUT
Default socket timeout. The default value is 60000 ms.

説明だけでよく分からない、最初はサーバサイトワーカスレッドの処理時間タイムアウト値 と理解しました。

テストアプリでタイムアウト時の動作を確認する。

+----------+            +----------------+
| SoapUI   +------------+  テストアプリ  |
+----------+            |                |
                        +----------------+
                        |  JBossAS 7.x   |
                        +----------------+

SoapUIのリードタイムアウトを120秒に変更する、テストアプリに Thread.sleep(70 * 1000) コードを仕込んで処理時間を長くする。これでタイムアウトになると考えたのですが、結果的に タイムアウトせず、正常なレスポンスでした。これで、 DEFAULT_CONNECTION_TIMEOUT はワー カスレッドのタイムアウト値ではないことが分かりました。

説明文にソケットのタイムアウト値であることが書かれたので telnet でソケット通信の各 stepの処理時間をあえて長くして動作状況を観測してみました。

  1. telnetでコネクションを貼る
  2. ヘッダを途中まで送信する
  3. 60秒待つこと
$ telnet localhost 8080
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
POST http://localhost:8080/testapp/HelloWorld HTTP/1.1
Connection: close
Accept-Encoding: gzip,deflate
Content-Type: text/xml;charset=UTF-8
SOAPAction: "sayHello"
Content-Length: 318
Host: localhost:8080
★ここで60秒を待つ
Connection closed by foreign host.

step3のところで60秒後、サーバからfinパケットが送出されてコネクションが切れた。 DEFAULT_CONNECTION_TIMEOUT パラメータの意味が少し掴みました。

少し掘り下げて見たいので、コードリーディングして実装の概要を以下に紹介します。

[調査]SAS統計ソフトについて

ある飲み会で JT のプログラムマーさんと出会って、最初彼からの自己紹介で「プログラムマー です」と聞いた時に、Java屋、Ruby屋普通のWebエンジニアだと思った。話を詳しく聞くとなん と、「SAS」という言語しか扱っていないようです。 SAS という言語は初耳なので、軽く調べること にした。

[メモ]JBossAS稼働情報収取得方法

コマンドインタフェースから JBossAS 7.x アプリケーションサーバの稼働情報収取得方法に ついて検証してみた。主に以下の方法が存在する。

  1. jboss-cli.sh コマンドでサーバの設定情報やRuntime情報を取得する。
  2. RESTful Management Interfaces HTTP通信でJSON形式で情報ヲ取得する。
  3. remoting-jmx インタフェースでMBeanサーバから情報を取得する。

1と2の情報源が一緒です。取れる情報が次のようなイメージ、用途に応じて選ぶことになると思 います。

+-------------+
| jboss-cli   |
|   +---------+-----+
|   |         |     |
|   |         | JMX |
|   |         |     |
|   +---------+-----+
+-------------+

[レシピ]Kerberos認証環境の構築

夏休み中にKerbrose認証環境の構築復習を行いました。ここでメモしておきます。