Azureの小ネタ (改)

~Azureネタを中心に、色々とその他の技術的なことなどを~

Fiddler で Javaアプリの通信をキャプチャする

皆さんご存じのFiddlerですが、Javaのアプリで通信をキャプチャしてくれなかったのでちょっとだけ調べました。

www.telerik.com

HTTP通信の場合

公式でも触れられていたように、FiddlerのLocal Proxyを使うのが正解みたいです。

以下のように環境変数でProxyを設定してください。javaコマンドに-Dで指定してもかまいません。

    System.setProperty("http.proxyHost", "127.0.0.1");
    System.setProperty("https.proxyHost", "127.0.0.1");
    System.setProperty("http.proxyPort", "8888");
    System.setProperty("https.proxyPort", "8888");

HTTPS(SSL)の場合

Fiddlerでは、HTTPS通信もキャプチャできたりしますが、Javaではその設定をオンにした上で、上記の設定を有効にしても例外が発生し、キャプチャできません。

証明書をごにょる必要があります。Fiddlerの設定画面開いて、HTTPSタブを開きます。[Export Root Certificate to Desktop] ボタンがあるので、まずはデスクトップに保存した後、任意の場所に格納します。

f:id:StateMachine:20151004132516p:plain

次にJDKの keytoolsを使ってストアに格納します。キーストアのパスワードは後で使います。

"C:\Program Files\Java\jdk1.8.0_60\bin\keytool.exe" -import -file  c:\anywhere\FiddlerRoot.cer -keystore FiddlerKeystore -alias Fiddler

次に、以下の設定を追加すれば完了です。

   System.setProperty("javax.net.ssl.trustStore", "C:/anywhere/FiddlerKeystore");
   System.setProperty("javax.net.ssl.trustStorePassword", "somepassword");
     

これで例外が発生せずに、キャプチャできると思います。

参考にしたのは、

eclipse - how to Capture https with fiddler, in java - Stack Overflowあたりです。

では。

Page BLOBにおけるAzCopy のスループットを測ってみた

人形町のちょい髭親父が、VHDをアップロードしようとして、AzCopyのスループットに悩んでいたようなので、少し検証してみました。

Page BLOBはページ単位の管理なので、ページがAll ZeroならUploadを省略できるはずですので、以下の1Gバイトのデータを3つ作ってみました。本当のVHDは面倒なので作ってません。ちなみにAzCopyはPreview版のを使いました。

  1. 全てゼロのファイル
  2. 1024バイト毎に全てゼロと、なんからの値が交互に格納されているファイル
  3. 前半が全てゼロ、後半が全て値が入っているファイル

1.番目の結果、圧倒的に速いです。やっぱりゼロページの場合、Uploadは、省略しているようですね。

Finished 1 of total 1 file(s).
[2015/09/11 16:22:44] Transfer summary:
-----------------
Total files transferred: 1
Transfer successfully:   1
Transfer skipped:        0
Transfer failed:         0
Elapsed time:            00.00:00:06

2. 交互のファイル。スループットが伸びません。進捗は常時、5MB/s くらいの表示でした。

Finished 1 of total 1 file(s).
[2015/09/11 16:26:28] Transfer summary:
-----------------
Total files transferred: 1
Transfer successfully:   1
Transfer skipped:        0
Transfer failed:         0
Elapsed time:            00.00:03:35

3. 前半ゼロ、後半非ゼロが入ってファイル。結果2より速かったです。進捗をみると、当初圧倒的150MB/sとか表示が出て、後半5MB/sとかに落ちてきますので、予想通りですね。

[2015/09/11 16:29:58] Transfer summary:
-----------------
Total files transferred: 1
Transfer successfully:   1
Transfer skipped:        0
Transfer failed:         0
Elapsed time:            00.00:01:37

ちゃんとゼロページは省略されているようでめでたしめでたし。現場からは以上です。

mavenでJettyをさくっと動作させるまで

mavenでJettyを実行するところまでの備忘録。実行には、jetty-maven-pluginを使います。

必要なもの

  • Java 8
  • Maven 3.3
  • Windows (環境でやってます)

Javaを設定しJAVA_HOMEを設定後、パスに追加する。mavenを解凍し、maven/bin もパスに追加する。

ちなみに、maven-jetty-pluginは以下を参照。

WebApps プロジェクト作成

以下のmvnコマンドを実行すると、test-serverフォルダが作成される

$ mvn archetype:generate -DarchetypeArtifactId=maven-archetype-webapp -DgroupId=test.webapp -DartifactId=test-server -Dpackage=test.webapp -DinteractiveMode=false

以下のように出力される

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin:2.3:generate (default-cli) > generate-sources @ standalone-pom >>>
[INFO]
[INFO] <<< maven-archetype-plugin:2.3:generate (default-cli) < generate-sources @ standalone-pom <<<
[INFO]
[INFO] --- maven-archetype-plugin:2.3:generate (default-cli) @ standalone-pom ---
[INFO] Generating project in Batch mode
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-webapp:1.0
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: basedir, Value: c:\Workspace\eclipse\ws-p\ztest
[INFO] Parameter: package, Value: test.webapp
[INFO] Parameter: groupId, Value: test.webapp
[INFO] Parameter: artifactId, Value: test-server
[INFO] Parameter: packageName, Value: test.webapp
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: c:\Workspace\eclipse\ws-p\ztest\test-server
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 13.457 s
[INFO] Finished at: 2015-08-23T18:19:26+09:00
[INFO] Final Memory: 13M/193M
[INFO] ------------------------------------------------------------------------

ディレクトリ構成は以下のとおり。

C:.
└─src
    └─main
        ├─resources
        └─webapp
            └─WEB-INF

pom.xml の作成

以下のpom.xmlを用意する。jetty.versionは適宜修正。

dependencyは、以下を追加する。 * jetty-server * jetty-webapp

pluginには、以下を追加する。 * jetty-maven-plugin

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>test.webapp</groupId>
  <artifactId>test-server</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>test-server Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <properties>
    <jetty.version>9.3.2.v20150730</jetty.version>
  </properties>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-server</artifactId>
      <version>${jetty.version}</version>
    </dependency>
    <dependency>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-webapp</artifactId>
      <version>${jetty.version}</version>
    </dependency>
  </dependencies>
  <build>
    <finalName>test-server</finalName>
    <plugins>
      <plugin>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-maven-plugin</artifactId>
    <version>${jetty.version}</version>
      </plugin>
    </plugins>
  </build>
</project>

インストール&実行

インストールを実行すると色々追加される。

mvn install
C:.
├─src
│  └─main
│      ├─resources
│      └─webapp
│          └─WEB-INF
└─target
    ├─classes
    ├─maven-archiver
    └─test-server
        ├─META-INF
        └─WEB-INF
            ├─classes
            └─lib

jettyを実行する。

mvn jetty:run

ログが表示され http://localhost:8080/ にアクセスしてHello Worldが表示されればOK。

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building test-server Maven Webapp 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> jetty-maven-plugin:9.3.2.v20150730:run (default-cli) > test-compile @ test-server >>>
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ test-server ---
[WARNING] Using platform encoding (MS932 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ test-server ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ test-server ---
[WARNING] Using platform encoding (MS932 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory c:\Workspace\eclipse\ws-p\ztest\test-server\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ test-server ---
[INFO] No sources to compile
[INFO]
[INFO] <<< jetty-maven-plugin:9.3.2.v20150730:run (default-cli) < test-compile @ test-server <<<
[INFO]
[INFO] --- jetty-maven-plugin:9.3.2.v20150730:run (default-cli) @ test-server ---
[INFO] Configuring Jetty for project: test-server Maven Webapp
[INFO] webAppSourceDirectory not set. Trying src\main\webapp
[INFO] Reload Mechanic: automatic
[INFO] Classes = C:\Workspace\eclipse\ws-p\ztest\test-server\target\classes
[INFO] Logging initialized @4335ms
[INFO] Context path = /