ablog

不器用で落着きのない技術者のメモ

Java

Java アプリから S3 にアクセス時に必要な証明書がない場合に発生する例外

発生する例外 証明書ファイルが存在しない、もしくは存在するが中身が空の場合 java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty 証明書ファイルが存在する…

Linux で Java のバージョンを切り替える

手順 java のバージョンを切り替える $ sudo update-alternatives --config java There are 2 programs which provide 'java'. Selection Command ----------------------------------------------- * 1 /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java + 2…

JREに同梱されている証明書を確認する

Javaのバージョンを確認 $ JAVA_HOME/bin/java -version openjdk version "1.8.0_191" OpenJDK Runtime Environment (build 1.8.0_191-b12) OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode) 証明書をリスト表示する $ keytool -list -keystore $JA…

perf-map-agent 実行時に "AttachNotSupportedException: Unable to open socket file" と怒られる

事象 perf-map-agent をビルドして $ sudo yum -y install cmake $ git clone --depth=1 https://github.com/jvm-profiling-tools/perf-map-agent $ cd perf-map-agent $ cmake . $ make $ cd out /etc/hadoop/conf/ 以下の hadoop-env.sh, yarn-env.sh にex…

jar を解凍してクラスをデコンパイルして Java コードを調査する

find . -type f -name '*.jar'|xargs -n1 jar xf find . -type f -name '*.class'|xargs -n 1 jad find . -name '*.jad'|xargs -n 1 perl -nle '/md5/i and print qq/$ARGV:$_/'

macOS Sierra に SQL Developer 4.1.5 をインストールした

環境 macOS Sierra(10.12.4) 手順 JDK 8u112 インストール*1 Java Archive Downloads - Java SE 8 から jdk-8u112-macosx-x64.dmg をダウンロード ダブルクリックしてインストーラを起動し、ウイザードに従ってインストール SQL Developer 4.1.5 Oracle SQL …

Java Flight Recorder と Java Mission Control とは

Java Flight Recorder(JFR) は Oracle JDK に同梱されている稼働統計収集機能 Java Mission Control(JMC) は HotSpot JVM*1 に同梱されている JFR で収集したデータをGUI解析するツール*2 Java Flight RecorderとJava Mission Controlは低レベルおよび事後イ…

Windows で Java Mission Control(JMC) のヒープサイズを変更する

背景 Windows で Weblogic の Java Flight Recorder(JFR) のダンプファイルを分析していたら、動作が重い(特にイベントタブのスレッドごとのグラフ)ので、ヒープサイズを大きくしてみた。 変更方法 JDKのインストールディレクトリ\bin\jmc.ini の -vmargs の…

perf-map-agent で Java のプロセスにアタッチすると AttachNotSupportedException が発生する

事象 perf-map-agent で Java のプロセスにアタッチすると "Unable to open socket file: target process not responding or HotSpot VM not loaded" というエラーが発生する。 Java を実行する。 $ java ... 別セッションで perf-map-agent で実行中の Java…

OpenJDK7 のビルドが "java.lang.RuntimeException: time is more than 10 years from present: ..." エラーで失敗する

事象 OpenJDK7u40 のビルドが "java.lang.RuntimeException: time is more than 10 years from present: ..." というエラーで失敗する。 $ make (中略) /home/yazekats/Downloads/bin/jdk1.6.0_45/bin/java -XX:-PrintVMOptions -XX:+UnlockDiagnosticVMOpti…

OpenJDK7 のビルドが "./gamma: relocation error" というエラーで失敗する

事象 OpenJDK7u40 をビルドすると "./gamma: relocation error: .../libjava.so: symbol JVM_FindClassFromCaller, version SUNWprivate_1.1 not defined in file libjvm.so with link time" というエラーで失敗する。 $ hg clone http://hg.openjdk.java.ne…

Mercurial リポジトリから任意の tag を clone する

書式 $ hg clone -r <tag> <url> <directory> 例 $ hg clone -r jdk7u101-b00 http://hg.openjdk.java.net/jdk7u/jdk7u jdk7u101-b00 参考 How to get the tag changeset after you clone or pull to a tag using mercurial? - Stack Overflow</directory></url></tag>

OpenJDK7u101 を Oracle Linux 6.6 でビルドする

Mercurial をインストールする $ curl -L -O https://www.mercurial-scm.org/release/centos6/RPMS/x86_64/mercurial-3.7.3-1.x86_64.rpm $ sudo rpm -ivh mercurial-3.7.3-1.x86_64.rpm OpenJDK7u60 のソースコードを Mercurial リポジトリから clone する …

Java Mixed-Mode Flame Graphs で Java の CPU ネックをフルスタックで分析する

Brendan Gregg (NETFLIX の Senior Performance Architect) 作の Java Mixed-Mode Flame Graphs を使うと Java のプロセスが CPU ネックのケースで、Java アプリケーションコード、JVM(HotSpot VM)、Linux Kernel のどのレイヤーのどの関数がボトルネックに…

oracle.jdbc.ReadTimeout はソケット読込時のタイムアウト

Oracle JDBC Thin Diver の oracle.jdbc.ReadTimeout について調べたことをメモ。 Oracle ACE の id:yamadamn さんのスライドがわかりやすいです。 Oracle JDBCドライバプロパティの活用 from Oracle Fusion Middleware P.11 P.12 まとめ Oracle JDBC Thin D…

OpenJDK の HotSpot のソースコードを読む

素敵なサイト 徹底解剖「G1GC」実装編 HotSpot Memo ただのメモ OpenJDK をダウンロードする http://download.java.net/openjdk/jdk7/ から openjdk-7-fcs-src-b147-27_jun_2011.zip をダウンロードする。 解凍する $ unzip openjdk-7-fcs-src-b147-27_jun_2…

OpenJDK を yum で update した

# yum update java-1.7.0-openjdk (中略) Total download size: 26 M Is this ok [y/N]: y Downloading Packages: java-1.7.0-openjdk-1.7.0.71-2.5.3.2.0.1.el6_6.x86_64.rpm (中略) Updated: java-1.7.0-openjdk.x86_64 1:1.7.0.71-2.5.3.2.0.1.el6_6

Javaのスレッドダンプの読み方

あなたとスレッドダンプ - スレッドダンプ入門 - この国では犬が が非常にわかりやすく、自分でブログエントリを書く必要はないが、Oracle Database や Linux の性能分析に携わる者の観点から Java のスレッドダンプについて整理してみた。具体的なスレッド…

ネイティブスレッドとJavaスレッドのマッピング

Javaスレッドダンプの nid がOSのLWP番号の16進数表現。メモメモ。 取得したスタックトレースから、各スレッドの先頭行にある「nid=0xXX」という16進数に注目します。 この16進数が、prstatコマンドやpstackコマンドで取得したLWP番号(10進数)の16進数表現…

JNI(Java Native Interface) とは

JNI(Java Native Interface) はJavaで記述されたプログラムとネイティブコードを連携するための仕様らしい。おそらく共有ライブラリをメモリ上にロードして決められたABIに従ってJVMと連携するイメージではないかと思う(ここはかなり妄想)。 参考 wikipedi…

Eclipse に JDT をインストールする

ガキーン!*1 Eclipse に JDT がインストールされてないだと。。。 そうだ、JDT をインストールしよう。どうするんだっけ。 [Help]-[Install New Software] を選択して、 [Work with:] で [The Eclipse Project Updates - http://download.eclipse.org/eclip…

Parse and extract specified elements from source-code written in the C language ...

http://cpansearch.perl.org/src/TIMB/Java-2Perl6API-0.11/lib/Java/Javap/Grammar.pm http://cpansearch.perl.org/src/DCONWAY/Parse-RecDescent-1.965001/demo/demo_another_Cgrammar.pl

OPatch on Mac OS X Snow Leopard の出力が文字化けする

現象 文字化けする 環境変数 NLS_LANG、LANG の値は以下の通り % env|perl -nle '/LANG|LC/ and print' NLS_LANG=American_America.JA16SJISTILDE LANG=ja_JP.UTF-8 ターミナルのエンコーディングはUTF-8 原因 Macのjavacが出すエラーメッセージがShift_JIS…

jconsole で Tomcat に接続できない

jconsole で Tomcat に接続しようとすると、 接続に失敗しました: 再試行しますか? って怒られた。 netstat でみるとリスンしてるし、telnet で接続してみるとポートは空いている。ぐぐってみると、 結論から言うと、サーバの hosts の設定に問題があったみ…

Java プロセスを多数起動すると、物理メモリより先に swap を使う?

以前、お仕事をさせて頂いた方から質問を頂いたのでちょっと調べてみた。 Q & A Q. Solaris10 で、java のプロセスを多数起動していくと物理メモリではなく、swap から使っているように見える。 vmstat の結果をチェックしていたら、free には余裕があるよう…

org.apache.poi.openxml4j.exceptions.InvalidOperationException: Can't open the specified file: ...

現象 Java のバッチ処理を実行すると、以下の例外が発生する。 org.apache.poi.openxml4j.exceptions.InvalidOperationException: Can't open the specified file: '/tmp/poifiles/...' 環境依存。発生する環境と発生しない環境がある。 原因 /tmp の容量不…

某ETLツールから Oracle に FQDN で接続できなかった件

環境 Oracle は Active/Standby の HA 構成。 Virtual IP は使っていない。 スイッチオーバーする際は、DNS を書き換えるので、アプリケーション側の接続文字列は変更不要。 本現象が発生する少し前に、Standby 側にスイッチオーバーしており、本現象が発生…

Oracle に接続だけ行う Java プログラム

こんなファイルがあって、 > dir /b build.bat ConnectionTester.bat ConnectionTester.class ConnectionTester.java ojdbc14.jarコンパイルして、 > build.bat実行すると、 > ConnectionTester.bat orcl db01こんな感じ。 ソースコードは以下の通り。 Conne…

JDBC Thin Driver のデバッグ

id:takabow に教えてもらったのでメモメモ。 @yoheia JDBCのトレースはバージョンによって若干の差異がありますが、 http://otndnld.oracle.co.jp/document/products/oracle11g/111/doc_dvd/java.111/E05720-02/diagnose.htm http://twitter.com/takabow/sta…

Tomcat をインストールしたけど起動しない

Tomcat をインストールして起動して ps で見るとプロセスは起動しているけど、ブラウザでアクセスすると The requested resource (/xxx) is not available.って言われる。 catalina.out を見てみると、 # less /usr/local/tomcat/logs/catalina.out 致命的: …