JAVAのバグについて

By 杜若 桔梗 @ 2014-11-15 22:48

前回の投稿からずいぶんと間が開いてしまいました。桔梗です。

今回は珍しくLinux上でとあるソフトを動かしたときのお話です。

みんなも知っているSendmailというMTAがありますね。これの商用製品のアドオンという形で公開されている製品があるのですが、
この導入作業で遭遇したトラブルのお話です。
まあ、真犯人はバグだらけのJDK1.7系列ということなのですが、なかなか見つける手順というものは探してもないものですよね。
さっくりとお話をしますと、CoreDUMPが原因でフェイルオーバーするシステムがあると。原因はなんでしょうか、とう調査依頼です。
それならgdbで出力されたCoreをみてあげればいいわけです。コマンドライン上からは「gdb Coreを出力した実行ファイル Coreファイル」です。
その後に「thread apply all bt」と打つことですべてのスレッドをバックトレースすることができます。
これで、問題を起こしたスレッド、言い換えればCoreファイルを出力したスレッドの動きを追うことができます。
このときはメモリ周りのエラーでしたので重点的にGlibcやらLinux Kernel側を追っていました。今だからいえますが、これは思いっきり見当違いだったわけです。
真犯人は一番最初のスレッドにありました。ContinueInNewThreadだと?この後のスレッドはほとんどがsem_waitやら、pthread_cond_waitやら続いていました。
そこで、JDKのソースを探してみたところ・・・・・・

OpenJDK / jdk7u / jdk7u / hotspot/src/os/posix/launcher/java_md.cの1888行目以降を見てください。

ContinueInNewThread(int (JNICALL *continuation)(void *), jlong stack_size, void * args) {
int rslt;
#if defined(__linux__) || defined(_ALLBSD_SOURCE)
pthread_t tid;
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);

if (stack_size > 0) {
pthread_attr_setstacksize(&attr, stack_size);
}

if (pthread_create(&tid, &attr, (void *(*)(void*))continuation, (void*)args) == 0) {
void * tmp;
pthread_join(tid, &tmp);
rslt = (int)(intptr_t)tmp;
} else {
/*
* Continue execution in current thread if for some reason (e.g. out of
* memory/LWP) a new thread can’t be created. This will likely fail
* later in continuation as JNI_CreateJavaVM needs to create quite a
* few new threads, anyway, just give it a try..
*/
rslt = continuation(args);
}

pthread_attr_destroy(&attr);

とありますね。pthread_join()のところで場合によってはデッドロックが発生しますよね、これ。
たしかこの問題はJAVA1.8(8)で解決されていたように思いますがいかがでしょうか。

詳しい解説はこれから。

1888行目からの処理ですが、
pthread_createで pthreadを起動して、pthread_join でpthreadの終了待ちをしています、
この pthread_join は、ブロッキング関数の為、pthread_create で起動した処理が終了しないと、
デッドロックにはまって、ContinueInNewThread が終了せず、pthreadのIDが、スタックの変数の為、メソッドの外から終了させることもできません。

このソースでは、ContinueInNewThread で作ったソースがタイムアウトで終了する事もなく、外から殺す事も出来ない為、引き渡した処理によってはデッドロックが発生する致命的なバグです。

私も私でよくこんなもん見つけたよね・・・・・・

もちろん、openSUSEにはopenJDKが導入されています。できるだけ、openJDK8を利用した方がいいと思います。

12月30日(火) コミックマーケット87に参加します。場所は 西い35a です。
配布物は、いつもの Geeko Magazine を拡大した Geeko Magazine を予定しています。openSUSE について、盛りだくさんで貴重な1冊にしたいと考えていますのでよろしくお願いします。

現段階では次のような内容を予定しています。

  •  特集: openSUSE で同人活動(原稿書きや入稿データ作成、お絵かきなど)
  •  小説
  •  openSUSE 女子部 (イケメン?)

詳細は決まり次第お知らせします

執筆者募集

今回の Geeko Magazine の発行への貢献者を募集しています。

記事の提供

  •  特集枠: 上記のお題に沿った記事を提供して下さい(特に音楽とか、誰か書きませんか?)
  •  ネタ枠: ちょっと見に行ってみようかなと思うような、ネタを募集しています
  •  自由枠: 他の人の記事の挿絵、イラスト、漫画、特集枠に入らない技術ネタ

当日のスタッフ

  •  コスプレ(と衣装)

貢献して頂いた方には、できあがった Geeko Magazine を進呈します。

応募方法: コメント、Twitter、opensuse-ug のメーリングリスト、Facebook など何かしらの方法でお知らせ下さい。
記事の最終締め切り: 11月30日(ネタ枠はできるだけ早い方が良い)
フォーマット: テキストと画像など
レイアウトや文章等の調整はこちらで行います。

Geeko Magazine が欲しい人募集

いつもの A4 1枚の Geeko Magazine とは異なり、ある程度の印刷代がかかる見込みです。多くの部数を作成すると、単価は安くはなります。(50部であれば500円程度)

そこで、どの程度需要があるかを調査するために、事前予約を受け付ける予定です。また会場・または関東エリアでは受け取れない人のために、各地方で欲しい人に頒布して頂ける方がいれば、ご協力をお願いします。

 

openSUSE.Asia Summit のレポートはもう少しお待ち下さい。

この方法で、どのような条件でも確実にインストールできるか怪しいですが、本家 wiki にも書いていないので紹介します。依存パッケージが入らないケースがあれば教えてください

  1. openSUSE 用の RPM を Skype のウェブサイトからダウンロード
  2. ダウンロードしたファイルのあるディレクトリへターミナルで移動し、次のコマンドを実行(ファイル名はダウンロードした実際のファイル名に合わせてください)

オープンソースカンファレンス(以下, OSC) 2014 Kansai@Kyoto に出店しました!!

どうもはじめまして, 初 geeko blog 担当の iltsuka です.

# ちょこちょこOSC やKOF のお手伝いしてます.

 

さて, 今回のセミナーは Linux 初心者を対象としたもので, 「新しい生活を Linux といっしょに始めよう」 というのをやりました.

こういうところでのセミナーは初だったのですが, 緊張しながらも何とかなるものですね! (自称;

セミナーで使った資料は以下にアップしています.

なにかミスがあれば修正版をアップするので, 連絡があると嬉しいです.

新しい生活をLinuxといっしょに始めよう! from Shun Kittaka

 

ブースの方は, ビラは100部中残り数部 (詳細はど忘れ…) になるまで配りました.

今回はビラとステッカー(シール) もあって, ステッカーは枚数が限られていたのでそれっぽい人(?) 限定で配ってました.

特大ぎーこはもはや, ぬいぐるみというより看板娘として大人気でした~!

客を引き寄せたり, 某ぺんぎんに引き寄せられたり (?)

OSC 2014 kyoto OSC 2014 kyoto

オープンソースカンファレンス 2014 Nagoya に出展しました。
日本openSUSEユーザ会が名古屋に出展するのは、今年で3度目ですね!

今回のセミナーのタイトルは、「秘伝!クラウドに開発環境をえいっと構築する方法」でした。
実はこのセミナー、どういうわけだか事前申込者数の数が非常に多く、非常にプレッシャーを感じてました^^;
これからクラウドを活用したい!と思ってる方はやはり多いのでしょうか。
(単にタイトルが「釣り」だったという噂もちらほら・・・?)

あれから武山さんからの指摘もいただきまして、セミナー資料も一部修正しています。
セミナーの内容は下記からご覧ください。

今年は出展ブース数が昨年ほど多くなかったのか、日本openSUSEユーザ会としても机まるまる一個分でしたが、
名古屋の会場の熱気はやはり相変わらずですね!
セミナー配布資料も100部全て配りきることができました。

OSC名古屋2014

また、今回から中国産「ちょっと大きな小ぎーこ」もお目見えしています。
(小笠原さんに寄贈していただきました。ありがとうございます!)

ライトニングトークでは、武山さんの「OSS に貢献しよう」もありましたね。
こちらも公開されてま~す!

今回 OSC名古屋にご来場された皆様、
ブース出展に協力いただいた、こばやしさん、武山さん、
OSC でいつも多大なるご迷惑(?)ばかりおかけしている、宮原さん、びぎねっとの皆様、
本当に有難うございました! この場を借りてお礼を申し上げます。

今後も、日本openSUSEユーザ会を宜しくお願いいたします!!!

OSC名古屋 2014:
2014/7/5

  • ビラ配布: 100枚 + 15枚?(←OSC浜名湖の余り分)

次回の OSC 出展は、 2014/8/1 ~ 2014/8/2 の OSC京都です。
オープンソースカンファレンス 2014 Kansai@Kyoto

オープンソースカンファレンス 2014 Hamanako に出展しました。

セミナー:

今回 OSC浜名湖2014 のセミナー枠トリとして登場させていただきました^^;
いろいろトラブルが発生しましたが、なんとか 発表自体は 15分にはおさまったはずです。。。

今回のセミナーは初級者でも気軽に Linux を使ってみよう!というコンセプトで資料を作りました。
中級者以上の方は物足りない内容かと思いますが^^; 興味がありましたらご覧ください。


ブース:

OSChamanako2014

浜松に特大ぎーこ初上陸! というわけで、会場の一番隅(?)にブースが設置されました。
(お隣は、東京エリア Debian 勉強会さん。)

来場された方々に話を聞くと、
「Linux は触ったことないけど、これから勉強してみたい」
「Linux は普段仕事で使用しているけど、openSUSE は使っていない」
「仕事で openSUSE も使ってます。デスクトップで使う分には最高の選択肢ですね!」
と、様々な声を聞くことができました。

これを機会に、ぜひ openSUSE を試していただきたいと感じています。
Linux は Ubuntu とか Redhat だけじゃないんだぞ~と^^


次回は:

次回は、7/5 のオープンソースカンファレンス Nagoya 2014 の出展を予定しています。
続けて東海地方となりますが、またまたよろしくお願いしま~す!

配付資料: Geeko Magazine Vol.8

セミナー

前回の「サーバーだけじゃない!Linux デスクトップを使い倒そう!」の続編として、セミナーを行いました。参加人数は前回よりも少し多い25人くらいの方が聞きに来てくれました。

プレゼンテーション中に2つ質問をしました。1つめの質問は Linux 環境をインストールするために、仮想マシンを使用しているか物理マシンを使用しているかでした。物理マシンを使っている人は1人もいないという結果でした。使用している仮想マシンは VirtualBox が、VMware 系を使っている人よりも多い結果となりました。

2つめの質問は vi と emacs のどちらを使っているかという定番のものでした。vi が圧倒的に多い結果になりました。

サーバーだけじゃない!Linux デスクトップを使い倒そう!その2 from ftake

キャラクター大集合!

土曜日の朝には、出展団体のサポートキャラクターが大集合するイベントが開催されました。会場にはちゃんおぷのパーソナリティの渕上さんをはじめとする声優さんと、約200名以上の人が集まりました。プロのモデルさんがサポートキャラクターのコスプレをするという、豪華なイベントでした。

ユーザ会では Geeko と「ぎーこ」を連れて行きました。結果は13/15位でしたが、「20年もマスコットをやっていることに驚いた」「名前を初めて知った」「意外と可愛い」など、良い反応を得られました。

その後、ブースでちゃんおぷのコミュニティ紹介のインタビューを受けましたので、近いうちにニコニコ動画で公開されると思います。

ブース

OSC東京2014春 ブース

今回のブースは Raspberry Pi、Cubieboard、Beaglebone Black と、ARM ボードが勢揃いでした。気になる方も多いようで、多くの方に「これは何ですか?」と聞かれました。

また、今回はユーザ会として初めて作成した openSUSE シールセットを配布しました。キャラクター大集合の影響もあってか好評で、気づいたら100枚以上配布していました。まだ残っていますので、欲しい方は今後のイベントに是非来て下さい。

Geeko Magaine vol. 8 は「openSUSE に貢献してみませんか」と「さくらのクラウドに openSUSE をインストール」の2本立てでした。貢献する方法は本文中に書いた以外にも、コミュニティを盛り上げるための「ぎーこ」のコスプレをする、絵を描くなど、色々あります。興味のある方はぜひ、メンバーに声をかけて下さい。

今回は2日間合計で、7人のユーザ会メンバーがブース対応をしてくれました。ありがとうございました。ブースでの対応は、様々な人と情報を交換する良い機会だと思います。次回以降のイベントでも、ブースに立って頂ける方を募集していますので、よろしくお願いします。

人手が足りているか足りていないかは、あまり問題ではありません。多くの人がブースにいれば、コミュニティが盛り上がっていることを感じてもらうこともできるのではないかと思います。

今後のイベント

次回のイベントはオープンソースカンファレンス浜名湖です。4月からはオフラインイベントも復活予定です。

10 / 27« 先頭...89101112...20...最後 »