JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編] (JJUGナイトセミナー「Java解析ツール特集」 発表資料) 2021年10月7日 株式会社NTTデータ 技術開発本部 先進コンピューティング技術センタ 阪田 浩一Read less
こんにちは、Chatwork 株式会社のソフトウェア開発者、立野と申します。 2021 年 7 月に アマゾン ウェブ サービス ジャパン (AWS) さん主催のイベント「そろそろマネージド、クラウドネイティブで行こう ! サーバーレスへのチャレンジ」にて、Chatwork におけるサーバーレス開発事例をお話しました。 弊社事例に対して「エンタープライズ開発でおなじみの Java/Scala で、高速・低コストの AWS Lambda 関数を実現する技術」が興味深い、という反応をいただきました。 この点を「ぜひ深堀りして紹介してみませんか」と AWS のソリューションアーキテクトの方々にお誘いを受けましたので、皆さんでも お試しいただけるソースコード つきの実践形式でご紹介いたします。 なお弊社事例の背景やアーキテクチャ詳細などにご興味のある方は、ぜひブログ記事や発表資料をご覧ください。
はじめにこんにちは、2021年新卒入社の本田です。私はJavaもSpring Bootもほとんど何も知らないのですが、業務でSpring Bootを使いそうなので、「Spring勉強しなきゃ😇」という気持ちがあります。 Spring Bootアプリケーションのネイティブイメージが簡単に作れるSpring Nativeについて調べてみたので、それを紹介します。 Spring Nativeとは?Spring NativeとはSpring Bootアプリケーションをほとんど変更することなく、ネイティブイメージを生成することを目指したプロジェクトです。ネイティブイメージの実行はJVM(Java仮想マシン)による実行と比べて、起動時間が早い、ピークパフォーマンスに達するのが早い、メモリの使用量が小さい等の利点を持っています。 Spring Nativeでは、Spring Bootアプリケーションの
Kernel/VM探検隊はカーネルや仮想マシンなどを代表とした、低レイヤーな話題でワイワイ盛り上がるマニアックな勉強会です。佐伯氏は、WebAssemblyのWebの外の応用について発表しました。全2回。前半は、Wasmがアツい理由とデザインゴールについて。 今回のテーマは「Kernel/VM的WebAssembly入門」 佐伯学哉氏(以下、佐伯):佐伯が『WebAssemblyのWeb以外のこと全部話す』というタイトルで発表します。 まず、WebAssemblyとは何ぞや? という一般的な話なのですが、「Wikipedia」からの引用によれば、「Webブラウザーのクライアントサイドスクリプトとして動作する低水準言語である。ブラウザー上でバイナリフォーマットのかたちで実行可能であることを特徴とする」とあります。 実際の応用例としては、WebでGoogle Meetの背景ぼかしに使われていた
Red Hat で Solution Architect として OpenJDK を担当している伊藤ちひろ(@chiroito)です。 この記事は、Red Hat Developerのブログ記事、Shenandoah garbage collection in OpenJDK 16: Concurrent reference processing | Red Hat Developer の翻訳記事です。 OpenJDKにおけるShenandoahガベージコレクション (GC) プロジェクトの主の動機は、ガベージコレクションの停止時間を短縮することでした。参照処理は、伝統的にGCの停止の主な原因の1つでした。この関係はほぼ一次式です。つまり、アプリケーションがより多くの参照を処理すればするほど、ガベージコレクションの停止と遅延への影響は大きくなります。ここで重要なのは「処理」、つまりGCサイ
私は、OpenJDKのCommitter業や仕事でミドルウェアのSolution Architectとして活動している関係上、最近はコンテナ上でJavaアプリケーションを動かすことが非常に多いです。 KubernetesでJavaアプリを監視する場合には、Elasticsearch+KibanaやPrometheus+GrafanaなどでログやMBeanを監視する方法が一般的に行われています。 Java 11では有償JDKに含まれていた機能がOpenJDKへ寄贈され、JDK Flight Recorder (JFR)として生まれ変わりました。JFRはJVMの内部の情報やその上で動くJavaアプリケーションの様々な情報をほとんど負荷無く記録し、ファイルとして取得できます。このファイルをJDK Mission Controlなどのツールを使って確認し、これまでより詳細に分析できます。 これまで
そんなあるときに、めもりーさんという方がPHPでJVMを実装しているツイートを見つけました。「これはおもしろいな」と思うと同時に「PHPでできるならRでもできるだろう」という思いがこみ上げてきて開発することにしました。 ー そんなに簡単にやってみようと思ったんですね(笑) もともとコンパイラやインタプリタは作ったことがあったので、仮想マシンも作れるかなって(笑) 私が作ったjvmrrはFizz BuzzくらいのJavaコードは実行することができるのですが、めもりーさんの資料のおかげで開発するためのハードルが低く済みました。 ー そもそもなぜRで「変なもの」を開発するようになったのでしょうか? Rって言語仕様が変わっていて本当におもしろいんですよ。それをもっとみんなに知ってほしくて言語仕様を活かしたものを作って公開するようになりました。Rってデータサイエンティストや研究者しか使わないイメージ
Red Hat で Solution Architect として OpenJDK を担当している伊藤ちひろ(@chiroito)です。 この記事は、Red Hat Developerのブログ記事、Introduction to ContainerJFR: JDK Flight Recorder for containers - Red Hat Developer の翻訳記事です。 OpenJDKは長い間、実世界のアプリケーションやワークロードのトップに君臨してきました。これは、パフォーマンス、互換性、信頼性、そして観察可能性を一体化して選ばれています。長年にわたり、JDK Flight Recorder (JFR) と JDK Mission Control (JMC) は、OpenJDKの成功に貢献してきました。しかし最近まで、どちらも商用機能であり、特定のユーザやワークロードでしか利用
Back in college, I was very interested in Java bytecode. When I got an internship at Google in 2013, I was skeptical of the security of the Java version of Google App Engine and got permission to spend the last week of my internship doing a mini red team exercise, trying to break into App Engine. This is the story of how I found a vulnerability and developed an exploit to break out of the App Engi
原文(投稿日:2021/01/31)へのリンク GraalVMは、Javaで記述されたJava仮想マシン(JVM)を提供する新コンポーネント"Java on Truffle"を含む、メジャーバージョン21.0をリリースした。GraalVMはそれ自体、JavaやPython、JavaScriptなど複数言語で記述されたアプリケーション実行のための共有ランタイムを提供する、多言語仮想マシンである。 これまでのリリースでは、GraalVM上でJavaアプリケーションを実行するには、GraalVMのJust-In-Time(JIT)コンパイラでJava HotSpot VMを使うか、あるいはGraalVM Native Imageを使ってネイティブ実行コードにコンパイルする必要があった。今回のリリースで、Truffleフレームワークを使ってJavaで記述されたJVMであるJava on Truff
「Spring Native」ベータ版公開、GraalVMによりSpring FramworkのJava/Kotlinアプリをネイティブイメージにコンパイル。JavaVMに依存せず瞬時に起動可能 Spring Frameworkの開発チームとGraalVMの開発チームは、GraalVMを用いてSpring Frameworkのアプリケーションをネイティブイメージにコンパイルする「Spring Native」がベータ版として公開されたことを発表しました。 Announcing Spring Native Beta! Read the blog post https://t.co/5klXV6kSVB and check out the video for more details. #spring #native #graalvm https://t.co/83pI3vNYEr — Spri
はじめに この記事はシスコ同志によるAdvent Calendarの25日目として投稿しています。 幸いタイトルのような無茶振りには遭ったことはありませんが、シスコではJavaバイトコードを操作する技術を使った監視製品を開発しているので、その技術について本記事でサンプルを交えて紹介します。 この記事を読んで出来ること おわかりでしょうか?HelloWorldはAliceに対して挨拶するプログラムだったのに、-javaagent:agent.jarというオプションを付けて実行すると、Malloryに挨拶するプログラムに変わってしまいました。 このカラクリはJVMが読み込んだJavaバイトコードを実行時に書きかえ、変数の値をAliceからMalloryに変えています。HelloWorldのソースコードも、コンパイル後の.classファイルも変えていないにも関わらず、実行時に処理を変更できてしま
Running a Java application in Docker on a VM hosted in the cloud is not uncommon these days. But let’s take a closer look at this setup. We have a bare metal box somewhere in the cloud provider’s data center and hypervisor host OS running on that box. Next, we have a guest OS running in a VM provided by the hypervisor. Docker is running in the guest OS and provides a container runtime. Not to ment
はじめに JFRにおける「イベント」 イベントタイプとサンプリング データフォーマット 循環バッファとデータフロー リポジトリとJFRファイル名 JFRの開始とJFRファイルダンプ まとめ 参考 はじめに JDK Flight Recorder(JFR)はJavaで利用できる常時本番適用可能な超低オーバーヘッドのプロファイラです。性能分析とか障害対応の強い味方ですね! 今まで商用ライセンスのみ使用可能だったのですが、JDK11よりOpenJDKに取り込まれ自由に使えるようになりました。オープンになったので色々自分でも使いたいですし、色んな人にも使って欲しいなと思っています。 ただ、Oracleの公式ドキュメントが余りにもサラリとし過ぎていて良くわかんないので、いくつかのOracleや有志の発表資料や自分の知識を元にアーキテクチャ概要を解説して見ました。 この辺をしっかり分かりやすく書いた公
Java 8 以降の Java 仮想マシンの仕様のうち、各バージョンの差分を洗い出しました。the が that になったり、item が entry になる変更で、文の意味が変らない変更は除いています。 I listed the differences between each version of the Java Virtual Machine specification for Java 8 and later. I excluded changes that do not change the meaning of the statement, such as the changing of "the" to "that" or the changing of "item" to "entry". 元の情報はこちらです。 The original information is h
どうも、趣味でOpenJDKのコミッタをしてます。 とあるブログを読んでいたら気になる点があったので検証してみました。 JITと暖気 Javaプロセスはアプリケーションを動かしながら必要に応じてバックグラウンドでバイトコードをネイティブコードにコンパイルします。このコンパイル時にはCPUリソースを使用します。 コンパイルにはいくつかのレベルがありますが、コンパイルされる前やレベルの低いコンパイルのコードはCPUのリソース効率が悪かったり、アプリケーションの処理中にコンパイルが実行されるとCPUリソースを奪いあったりなどが問題になります。 そのため、Java のアプリケーションで性能を気にする要件がある場合、本番に近いリクエストを投げてコードをJITコンパイルする事があります。これをよく暖気と言います。これにより本番のリクエストが来る前にコードを最適化し、よりCPUリソース効率の高いコードで
こんにちは。ZOZOテクノロジーズSRE部の市橋です。普段は主にAWSを用いてプロダクトのシステム構築、運用に携わっています。今回は弊チームで取り組んでいるZOZOMATのシステム改善業務の一例として、JVMの暖機運転の仕組みを取り入れた話をご紹介します。 ZOZOMATとは お客様の足を3Dで計測するために開発された計測用マットです。ZOZOMATでの計測情報をもとに、靴の推奨サイズを参照するなどのサービスをご利用いただくことが可能です。ご興味のある方はこちらをご確認ください。 JVMの暖機運転とは 今回テーマとして取り上げるJVMの暖機運転とは何かについて簡単に触れていきます。JVMではJIT(Just In Time)コンパイラによるコンパイル方式が取り入れられています。これはアプリケーションの実行前にプログラムの全てを機械語にコンパイルするのではなく、プログラムの実行時にコンパイル
LINEが定期的に開催する技術者向けミートアップ「LINE Developer Meetup」。65回目の は「Java」というテーマで、JavaのスペシャリストであるLINE Fukuoka株式会社のきしだなおき氏が、Java 9から14での細かい機能変更について紹介しました。関連資料はこちら。 Java9からJava14までの4つの細かい仕様変更 きしだなおき氏(以下、きしだ):よろしくお願いします。僕のセッションでは「Java9からJava14までをおさらいをする」という話をします。 自己紹介ですが、きしだと言います。LINE Fukuokaで働いていて、最近7年ぐらい放置していた洗濯機をやっと買い替えて、「文明って便利だな」と思っているところです。 今日の話ですが、Java9からJava14まで、けっこういろいろな変更が積み重なっていて、大きい言語仕様の変更などはけっこう話題になる
「Offers Q&A」は、プロダクト開発の知見が集まるQ&Aプラットフォームです。「副業は何から始めれば良い?」「本業と副業の割合をどうやってマネジメントしてる?」など、仕事に関することやスキル、あなたのキャリアの悩みを気軽に相談・回答してみましょう! →「Offers Q&A」でさっそく質問・回答してみる! 今の案件内容と獲得経路 Javaをメインにフリーランスエンジニアをしている、いろふ(@irof)です。システム開発の仕事は10年以上、フリーランスとして独立して4年目になります。 会社員をしていた頃は主に企業内で使われる基幹システムの開発に携わってきました。フリーランスとしてはシステム開発だけでなく、Javaに限らない技術支援やチームビルディングのサポートなどいろいろさせてもらっています。コミュニティ活動として関西Javaエンジニアの会などをやっています。 ▲JJUGでの直近の登壇
こんにちは。SPEEDA 開発チームの old_horizon です。 JVM アプリケーションの運用について回るのが、OutOfMemoryError (以下 OOM) への対処です。 しかし実際に発生した際に、適切なオペレーションを行うのは意外と難しいのではないでしょうか。 特に本番環境では、まず再起動して復旧を急ぐことも多いかと思います。しかし、ただそれを繰り返すばかりでは原因がいつまでも特定できません。 今回は Kubernetes で運用する JVM アプリケーションに対して、ダウンタイムを抑えつつ調査に役立つ情報を自動的に収集する仕組みを構築してみたいと思います。 環境構築 実際に構築してみたサンプルを、こちらのリポジトリに用意しました。 https://github.com/old-horizon/k8s-oom-sample 動作確認は以下の環境で行っています。 Ubunt
概要 社内プロキシ下での開発にはCntlmを使うといいよという話。 注意事項 この記事の内容を導入する場合、自己責任でお願いします。 コレ的な設定は会社のセキュリティ的にグレーになるパターンが多いと思われるので、セキュリティ担当部署に導入して良いか相談してみるのが良いでしょう。 対象とする読者 社内プロキシ下での開発に苦しんだことのある開発者。 パスワードが変わったからアプリとかCLIツールの設定を全部変えないとダメじゃん! curl で社内のAPI叩くときはプロキシ通したくないのに社外のときは通さないとダメとかやってられん! この言語のパッケージマネージャーのプロキシ設定ってあるのか?また調べないとダメなんか・・・ などなど。 社内プロキシとは? 会社によってはインターネットに出るときに通さねばならないプロキシ。 多くの場合PCでログインするときと同じユーザ名・パスワードを設定する必要が
このようにして、Reified genericsとプリミティブの特殊化は、Javaの書き方と実行の方法を根本的に変えることを約束する、はるかに大きなプロジェクトに組み込まれた。 深い低レベルの変更が行われているにもかかわらず、プロジェクトチームの目標は、既存のJavaアプリケーションへの混乱を最小限に抑え、独自のコードでValhallaの機能を使用する開発者に簡単な明確な意思表示のあるアプローチを提供することにある。 Valhallaは未完成であり、いつ実現されるかについての公式ロードマップはまだないことに注意が必要だ。 評決:進行中(Project Valhallaの一環として) 符号なし算術 この機能をサポートする可能性については、Javaの歴史の中で何度も議論されてきた。しかし、導入には多くの複雑なことがある。 例えば、Javaの型システムの中で符号の属性をどのように表現すべきか、J
手持ちのコアファイルがない場合は、yasuenagさんのリポジトリからすぐに作れます!! https://github.com/YaSuenag/garakuta/tree/master/NativeSEGV Linuxではあらかじめulimit -c unlimitedしてから実行してください。 デバッグ情報付きのOpenJDKビルドを使います。OpenJDKのソースをcloneして: $ configure --enable-debug --with-native-debug-symbols=internal --disable-warnings-as-errors $ make images です。 今回はjdk14 (https://hg.openjdk.java.net/jdk/jdk14/) をビルドしたものを使いました。buildディレクトリ以下にOpenJDKビルドができあ
原文(投稿日:2020/05/26)へのリンク Concurnasは、並行分散システムの構築を目的として設計された、オープンソースのJVMプログラミング言語だ。オブジェクト指向、関数型、リアクティブなプログラム構造を特徴とし、静的に型付けされている。 マルチスレッドの複雑性を隠蔽する簡潔な構文、GPUコンピューティングのネイティブサポート、ベクトル化(vectorization)、行列などのデータ構造を供えたConcurnasは、マシンラーニングアプリケーションやハイパフォーマンスな並行アプリケーションの開発を可能にする言語である。JavaやScalaなど、他のJVM言語との相互互換性も持っており、バージョン1.8から最新のGAリリース14までのOracle JDKとOpenJDKをサポートする。 作者でConcurnas Ltd.の創業者でもあるJason Tatton氏に、言語とその設
Red Hat で Solution Architect として Quarkus を担当している伊藤ちひろです。 この記事は、Red Hat Developerのブログ記事、Mandrel: A community distribution of GraalVM for the Red Hat build of Quarkus - Red Hat Developer の翻訳記事です。 Javaコミュニティは、開発者とユーザーのニーズに合わせて進化、改善、適応する能力を何度も実証してきました。言語とフレームワークの選択に25年を費やした後も、Javaはエンタープライズ・ユース・ケースでの強力な実績と機能により、現在使用されている言語の中で常に上位に位置しています。Red Hatは長い間、Javaおよびオープンソースソフトウェア開発における強力なリーダーであり、進化を続けるJavaの最前線であ
要約 JVMは任意の言語で作ることができるので、Perlで書いてみました github.com このようにクラスファイルを読み取り、それを実行することができます 今回は読者がJVMを書き始められるようにクラスファイルの読み取り方に焦点をおいて解説します(あまりPerlの話はしません) 目次 自己紹介 JVMの基本 クラスファイルの解説 オペコードの実行 まとめ 自己紹介 駅メモにて主にバックエンドを担当しているid:toricorです。 仕事ではサーバがPerl実装なので、Perlでいろいろな機能を実装したりパフォーマンスチューニングをしたりしています。 JVMをつくろう 残念ながら今のところ仕事ではほぼJVMと縁がないので、まずは基本を確認します JVMとは Java Virtual Machine(Java仮想マシン)の略です Java仮想マシン - Wikipedia JVMはJav
Whether we like it or not, but Java is one of the most widely used programming languages. However, since most of the applications in Java are either too boring or too complex - not every Java developer has enough curiosity to look under the hood and see how JVM works. In this post I will try to write a toy (and incomplete) JVM to show the core principles behind it and hopefully sparkle some intere
原文(投稿日:2020/03/15)へのリンク JavaやPython、JavaSciptなど、複数言語で記述されたアプリケーション実行のための共有ランタイムを提供する多言語仮想マシンのGraalVMが、Windowsプラットフォームをフルサポートしたメジャーバージョン20.0をリリースした。GraalVM 20.0 Windowsディストリビューションには、JavaScriptエンジン、GraalVMアップデートユーティリティのgu、GraalVMコンパイラの使用可能なJDKが含まれている。LinuxやmacOS用のディストリビューションとは異なり、WindowsではまだNode.jsサポートが使用できない点には注意が必要だ。 GraalVMのネイティブイメージ生成ユーティリティもアップデートされて、Windows上で拡張サポートが提供されるようになった。ネイティブイメージは、事前(ah
AWS Lambdaで動作するJavaは初回が遅いですが、速くする方法がないか調べました。 末尾にある参考サイトの内容にたどり着いて、実際に試してみたのでその記録です。 レイテンシ情報はX-Rayにて取得しました。 テスト対象 S3にファイルをPUTするだけのものです S3Client s3 = S3Client.builder().region(Region.AP_NORTHEAST_1).build(); PutObjectResponse result = s3.putObject( PutObjectRequest.builder().bucket(ENV_BUCKET).key("filename.txt").build(), RequestBody.fromString("contents")); package helloworld; import com.amazonaws
成功者がどのようにNew Relicを使用してKubernetesのパフォーマンスを4倍に向上させ、拡張性とスループットを改善したかをご覧ください。
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く