Kernel/Vm探検隊 online part2. 発表動画: https://youtu.be/brrm328XItM?t=8221Read less
AndroidのためのJava/Kotlinはスコープ外とします まず断っておくと、俺はScalaが好きだ。 自分が作ったScalaプロダクトは二個現存している。うち一つはまだまだ自分が開発している。というか今は会社を作って1人でプロダクトを作っている身なのだが、それもScala3+ZIO2でゴリゴリ書いている。 でも残念、もうScalaというかJVM言語がオススメできません。TypeScriptかGoかRustをオススメします。 どういうこと?まずこの記事を見ていただくのが一番分かりやすい。 https://aws.amazon.com/jp/builders-flash/202310/java-serverless-saas-backend/?awsf.filter-name=*all 素晴らしいエントリーだ。読みに行かないせっかちな方のために概要を紹介する JavaプロダクトをAWS
何故かJavaは敬遠される!? 筆者はIT業界に努めて17年ほどです。 SESとして働きに出ることが多かったのですが、近年はWebエンジニアとして PHP(Laravel)を使った開発が多くなってきています。 そんな開発現場ですが、プログラミング言語の話題に上がると 「Javaはわからない」 「Javaって難しいんでしょ?」 「環境構築がなぁ・・・」 なんて話をよく聞きます。 私はJavaの方が経験した期間が長かったので、特にそういった苦手意識は無いのですが Laravelの現場でもそういった話を聞くので、 「フレームワークの特性や、コードの書き方は結構似ているところが多いのに、何でみんな苦手なんだろう?」 と思ってしまうのです。 今回はそのギモンについて、私が思っていることを書いていきます。 (注:Java嫌いな人を論破したいわけではありませんw) 原因その1:インフラ構造上、難しいと思
どうも、趣味でOpenJDKのコミッタをしてます。 とあるブログを読んでいたら気になる点があったので検証してみました。 JITと暖気 Javaプロセスはアプリケーションを動かしながら必要に応じてバックグラウンドでバイトコードをネイティブコードにコンパイルします。このコンパイル時にはCPUリソースを使用します。 コンパイルにはいくつかのレベルがありますが、コンパイルされる前やレベルの低いコンパイルのコードはCPUのリソース効率が悪かったり、アプリケーションの処理中にコンパイルが実行されるとCPUリソースを奪いあったりなどが問題になります。 そのため、Java のアプリケーションで性能を気にする要件がある場合、本番に近いリクエストを投げてコードをJITコンパイルする事があります。これをよく暖気と言います。これにより本番のリクエストが来る前にコードを最適化し、よりCPUリソース効率の高いコードで
Kernel/VM探検隊はカーネルや仮想マシンなどを代表とした、低レイヤーな話題でワイワイ盛り上がるマニアックな勉強会です。佐伯氏は、WebAssemblyのWebの外の応用について発表しました。全2回。前半は、Wasmがアツい理由とデザインゴールについて。 今回のテーマは「Kernel/VM的WebAssembly入門」 佐伯学哉氏(以下、佐伯):佐伯が『WebAssemblyのWeb以外のこと全部話す』というタイトルで発表します。 まず、WebAssemblyとは何ぞや? という一般的な話なのですが、「Wikipedia」からの引用によれば、「Webブラウザーのクライアントサイドスクリプトとして動作する低水準言語である。ブラウザー上でバイナリフォーマットのかたちで実行可能であることを特徴とする」とあります。 実際の応用例としては、WebでGoogle Meetの背景ぼかしに使われていた
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? はじめに WebAssembly (略して Wasm) では WASI や WIT、 Component Model など様々な仕様があります。 それぞれが登場した背景、モチベーションなどを理解することでなんとなく概要を掴んでいくことができるのではないかと考えたため、過去・現在・未来と時間軸で整理してみました。 まず Wasm とその特徴に関して簡単に紹介した後、Wasm の過去として生まれた背景やモチベーションを紹介します。 そして現在の Wasm がなぜ注目を集めているのか、そして現在策定中の仕様と目指している未来について紹介します
はじめに こんにちは。インフラエンジニアの鈴木です。 この記事は、株式会社asken (あすけん) Advent Calendar 2024 の20日目の記事です。 あすけんでは、一部機能でOpenSearchを使い始めています。 たとえば、前にバックエンドの高橋さんがOpenSearchを活用したメニュー検索を記事にしてくれています。 今回は、OpenSearchを商用サービスで半年運用した経験で得られたノウハウとして、商用運用における注意点や、パフォーマンスを上げるための方法を記載します。 ※本記事では、Amazon OpenSearch Service(AWS上で提供されるOpenSearch)を前提としています。 OpenSearchは何に使うか OpenSearchは主に検索に使用し、代表的な用途は「文字列検索」や「ベクトル検索」です。 特に、文字列の部分一致検索はRDBMSなど
LINEが定期的に開催する技術者向けミートアップ「LINE Developer Meetup」。65回目の は「Java」というテーマで、JavaのスペシャリストであるLINE Fukuoka株式会社のきしだなおき氏が、Java 9から14での細かい機能変更について紹介しました。関連資料はこちら。 Java9からJava14までの4つの細かい仕様変更きしだなおき氏(以下、きしだ):よろしくお願いします。僕のセッションでは「Java9からJava14までをおさらいをする」という話をします。 自己紹介ですが、きしだと言います。LINE Fukuokaで働いていて、最近7年ぐらい放置していた洗濯機をやっと買い替えて、「文明って便利だな」と思っているところです。 今日の話ですが、Java9からJava14まで、けっこういろいろな変更が積み重なっていて、大きい言語仕様の変更などはけっこう話題になるの
「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ファイルも変えていないにも関わらず、実行時に処理を変更できてしま
おなじみの画像 JavaやScalaといったJVM言語のDockerイメージは、JVMを同梱しなければならない都合で肥大化しがちである。特に何もしなくても、例えば一般的なamazoncorretto:21のイメージサイズは217.7 MBもある。 hub.docker.com これにさらにビルド済みのJARファイルが載ってくるので、結構大きくなってしまうのだ。 そこで、Scalaのコンテナイメージのサイズをなんとか小さくできないかと、考えた。すると、JVMを使ったまま70 MiBくらいに縮めることができた。 github.com コンテナイメージのサイズを小さくするために、何をしたかを書いていく。ちなみに題材としたアプリケーションはちょっとしたHello, Worldをするだけのもので、ライブラリはCatsに依存させた。 JVM使う編 マルチステージビルドを行う Alpineなどの軽量ラン
要約 JVMは任意の言語で作ることができるので、Perlで書いてみました github.com このようにクラスファイルを読み取り、それを実行することができます 今回は読者がJVMを書き始められるようにクラスファイルの読み取り方に焦点をおいて解説します(あまりPerlの話はしません) 目次 自己紹介 JVMの基本 クラスファイルの解説 オペコードの実行 まとめ 自己紹介 駅メモにて主にバックエンドを担当しているid:toricorです。 仕事ではサーバがPerl実装なので、Perlでいろいろな機能を実装したりパフォーマンスチューニングをしたりしています。 JVMをつくろう 残念ながら今のところ仕事ではほぼJVMと縁がないので、まずは基本を確認します JVMとは Java Virtual Machine(Java仮想マシン)の略です Java仮想マシン - Wikipedia JVMはJav
そんなあるときに、めもりーさんという方がPHPでJVMを実装しているツイートを見つけました。「これはおもしろいな」と思うと同時に「PHPでできるならRでもできるだろう」という思いがこみ上げてきて開発することにしました。 ー そんなに簡単にやってみようと思ったんですね(笑) もともとコンパイラやインタプリタは作ったことがあったので、仮想マシンも作れるかなって(笑) 私が作ったjvmrrはFizz BuzzくらいのJavaコードは実行することができるのですが、めもりーさんの資料のおかげで開発するためのハードルが低く済みました。 ー そもそもなぜRで「変なもの」を開発するようになったのでしょうか? Rって言語仕様が変わっていて本当におもしろいんですよ。それをもっとみんなに知ってほしくて言語仕様を活かしたものを作って公開するようになりました。Rってデータサイエンティストや研究者しか使わないイメージ
また「プロになるJava」の宣伝か、と思われるので、今回は「プロになるJava」の宣伝は自粛します。 Java力をあげるためには最適な「プロになるJava」がオススメなんですが、そうするとこのエントリもこのあたりで終わってしまうので、今回は自重します。 ということで、よく「Java力をあげるにはどうしたらいいか」という質問をみかけます。どうしましょうね、という話。 ここで、「Java力をあげたい」と言ってるときの大半はプログラミング力をあげたいという話です。 もちろん「プロになるJava」もプログラミング力をあげるのにとても役に立つのですが、今回は「プロになるJava」以外で攻めてみましょう。 そうすると実のところJavaにこだわる必要がなくて、そして最近はPythonで無償のテキストがたくさん手に入るので、そういうのを見るといいんではないかと思います。 たとえば「Think Python
私は、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などのツールを使って確認し、これまでより詳細に分析できます。 これまで
雑にtweetしたら多少反応があったというか、新しいもの書くばかりではなく歴史を振り返る方が、場合によっては面白いというかためになるというか、 そもそもプログラミングに限らず現在や未来は過去の延長線上でしかないので、歴史を振り返ることは大事ですね。 先に断っておきますが「X(旧Twitter)」と書くの面倒だし「X」だけだとわかりにくいので、*1単にTwitterと記述すると思います。 あと自分はTwitterの中の人や昔Twitterの中の人だった人と軽く話したことはある程度で、もちろん自分はTwitterの中の人だったことはないです。外から観察した情報を書くだけです。 さて、どこから振り返ればいいのか難しいのと、そもそも歴史そのものを正確に詳細に振り返るというよりは、当時(から現在に至るまで)の雰囲気を伝えることや、それに対する自分なりの解釈などを書きつつ、これの読者に同じように過去を
こういう記事を読んだ。 transparent-to-radiation.blogspot.com なんかScalaのメモリ使用量が異常に多いなと思って、調べた。検証コードもアップした。 github.com 検証として、様々なJVM(OpenJDKとかCorettoとか)とそのバージョン(8, 11, 17)でJARを実行して考察した。JVMを用意するためにASDFを使った。また、ASDFから引っぱってこれないJVMのバージョン(OpenJDKの8など)は省略している。 JAVA_OPTSは-Xms100M -Xmx2Gである。 手元のマシン(Linux x86_64 Xeon W-10855M 2.80GHz 64GiB RAM)でのrun-matrix.shの実行結果は、以下の通り(各列は、JVM、計算件数、実行時間Sec、メモリ総使用量KiB)。 openjdk-11 openjd
こんにちは。ZOZOテクノロジーズSRE部の市橋です。普段は主にAWSを用いてプロダクトのシステム構築、運用に携わっています。今回は弊チームで取り組んでいるZOZOMATのシステム改善業務の一例として、JVMの暖機運転の仕組みを取り入れた話をご紹介します。 ZOZOMATとは お客様の足を3Dで計測するために開発された計測用マットです。ZOZOMATでの計測情報をもとに、靴の推奨サイズを参照するなどのサービスをご利用いただくことが可能です。ご興味のある方はこちらをご確認ください。 JVMの暖機運転とは 今回テーマとして取り上げるJVMの暖機運転とは何かについて簡単に触れていきます。JVMではJIT(Just In Time)コンパイラによるコンパイル方式が取り入れられています。これはアプリケーションの実行前にプログラムの全てを機械語にコンパイルするのではなく、プログラムの実行時にコンパイル
LINE株式会社は、2023年10月1日にLINEヤフー株式会社になりました。LINEヤフー株式会社の新しいブログはこちらです。 LINEヤフー Tech Blog LINE の Business Platform 開発担当フェローの Matsuno です。 今回は Spring Boot でアプリケーションを開発した場合のメトリクスの勘所についてご紹介しようと思います。 我々のチームでは Kotlin + Spring Boot での開発がデファクトスタンダードとなっているのですが、正直まだまだこのテクニカルスタックで開発しているエンジニアは日本では少ないのです。そこで、実際の運用の雰囲気を感じていただければと思いまして今回の記事を書くことにしました。 メトリクス取得の基本 我々のチームではメトリクスの格納先として Prometheus を利用しています。 Prometheus で格納し
世界 30 億の Java エンジニア向けに、Java 言語仕様・JVM仕様のバージョンごとの差分を見れるページを作りました。 The Java Language Specification diffs The Java Virtual Machine Specification diffs ぜひご利用ください! なにこれ? Java の各バージョンごとの言語仕様・JVM仕様はこちらのページで公開されています。 Java Language and Virtual Machine Specifications ただ、バージョンごとの変更点がありませんでした1。 そこで、各ページからテキストを抜き出して2、GitHub 上で差分が見れるようにしました。 更新について 細かい誤字脱字の変更とかを除いた差分が作れるとより良いのですが、そうすると今後の更新に手間がかかってしまいまそうでした。 それよ
ヤフー株式会社は、2023年10月1日にLINEヤフー株式会社になりました。LINEヤフー株式会社の新しいブログはこちらです。LINEヤフー Tech Blog こんにちは。Yahoo!広告エンジニアの高見と申します。 2021年10月より「第11代黒帯〜プログラミング言語(Java)〜」 に就任しました。 この記事では、「ヤフーにおけるJava開発」と、私が従事している「Javaサポートチームの活動」について、紹介します。 (※黒帯制度とは:各領域において突出した専門性を持つ社員を黒帯として任命し、社内外における活動を会社として支援する制度) 1.ヤフーにおけるJava環境 2017年10月頃から全社でシステムのモダナイゼーションが推進されています。 この取り組みで、主要開発言語がPHPから、JavaとNode.jsに変更となりました。 Javaは、主にサーバーサイドアプリケーションで使
本連載では、Javaプログラムの実行を担うJava仮想マシン(JVM)について、その情報を取得するさまざまなツールの利用を通じて理解を深めます。JVMやそのツールに関する知識はアプリケーションが正常に動作しているときではなく、障害など異常が起こった際に大いに活躍します。それだけでなく、Javaプログラムを動作させる仕組みを知ることはソフトウェアを開発するエンジニアの皆さんの知的な部分を刺激するとともに、シニアレベルのJavaエンジニアへと進む第一歩となります。連載第1回はJVMの概要を解説し、模擬的なトラブルシュート体験としてヒープダンプを取得して解析します。 はじめに 今後もアプリケーションをJavaで開発、運用していくことを前提にすると、そうした業務に携わる方は次のようなことを学び続けるでしょう。 Javaの半年ごとのバージョンアップに追随して新機能などを学ぶ アーキテクチャなどでの新
Subject: Apache Log4j2 Vulnerability - CVE-2021-44228, CVE-2021-45046, CVE-2021-45105, CVE-2021-44832 - ESA-2021-31 Note - We will update this announcement with new details as they emerge from our analysis. Please check back periodically. Update Log Dec 16, 2021 - 04:20 UTC - Update Summary: ECK 1.9 released which automatically adds the JVM option to impacted Elasticsearch clusters managed by EC
はじめにこんにちは、2021年新卒入社の本田です。私はJavaもSpring Bootもほとんど何も知らないのですが、業務でSpring Bootを使いそうなので、「Spring勉強しなきゃ😇」という気持ちがあります。 Spring Bootアプリケーションのネイティブイメージが簡単に作れるSpring Nativeについて調べてみたので、それを紹介します。 Spring Nativeとは?Spring NativeとはSpring Bootアプリケーションをほとんど変更することなく、ネイティブイメージを生成することを目指したプロジェクトです。ネイティブイメージの実行はJVM(Java仮想マシン)による実行と比べて、起動時間が早い、ピークパフォーマンスに達するのが早い、メモリの使用量が小さい等の利点を持っています。 Spring Nativeでは、Spring Bootアプリケーションの
Red Hat で Java Platform Advocate として OpenJDK を担当している伊藤ちひろ(@chiroito)です。 この記事は、Red Hat Developerのブログ記事、Java 17: What’s new in OpenJDK's container awareness | Red Hat Developer の翻訳記事です。 OpenJDKは、以前からLinuxコンテナ(DockerやPodman、またKubernetesのようなコンテナオーケストレーションフレームワークなど)を意識してきました。コンテナ対応とは、OpenJDKがコンテナ内で動作していることを検出することを意味します。この記事では、コンテナ対応がなぜ有用なのか、OpenJDKのその領域で最近何が変わったのか、そして、開発者がJVMの設定決定方法について理解を深めるために利用できる診断
はじめに こんにちは。計測プラットフォーム開発本部バックエンドチームの岡山です。普段はZOZOMATやZOZOGLASSなどの計測技術に関わるシステムの開発、運用に携わっています。去年の夏にZOZOFITというサービスを北米向けにローンチし、そのシステムも同様に開発、運用に携わっています。 本記事では、ZOZOFITの認証フローで実行されるScala実装のAWS Lambda関数が抱えていたパフォーマンス課題と、その課題の解決に至るまでの取り組みについてご紹介します。 目次 はじめに 目次 ZOZOFITとは ZOZOFITが利用する認証サービス カスタム認証フローとは パフォーマンスに関する課題 カスタム認証フローにおけるボトルネックの特定 Lambda関数のボトルネック調査 Lambda関数のメモリ設定最適化 パフォーマンス改善結果 終わりに ZOZOFITとは ZOZOFITは202
こんにちは、SREの戸田です。本日はJVM勉強会(運用編)に続けて開催したJVM勉強会(開発編)の一部を公開します。 図1 勉強会はやっぱりGoogle Meetでオンライン開催しました システムプロパティ システムプロパティは環境変数のように、プログラムの挙動を変えるために利用することが多いです。例えばOpenJDKそのものでも Integer.valueOf() で値をどの程度キャッシュするか*1を設定するためにシステムプロパティを使っています。 他にも user.language あたりはよく知られていますし、標準で提供されるシステムプロパティも多数あります。しかし製品コードから直接参照することは基本ないと思っていて、 File.pathSeparator などの提供されたAPIを使うことが望ましいでしょう。またシステムプロパティは動的に変更することも可能ですが、システムプロパティを
こんにちは、SREの戸田です。本日は社内で開催したJVM勉強会(運用編)の一部を公開します。 JVM、使っていますか?弊社ではサーバサイドKotlinが活躍しているので、もちろん日常的にJVMが稼働しています。このためサービス運用の一貫で必要になる知識や関連ツールなどをSREないしプロダクトチームに共有することを目的として、この勉強会を開催しました。 図1 勉強会はGoogle Meetでオンライン開催しました パフォーマンス・チューニング サービスを開発していると、この処理をもっと高速化したい!ランニングコストを抑えてユーザ体験の向上に投資したい!というというシーンには多く遭遇しますよね。こうしたユーザが増えてサービスに負荷がかかるようになったことで生じた課題に対して迅速に打ち手が取れることは、とても重要です。 しかし焦ってはいけません。「このコードはめっちゃループしてるし遅そう!」「あ
はじめに 最近スパイスカレーを食べるのはもちろん、作るのにもハマっている小林(@mako-makok)です。 近所のお気に入りのお店の閉店が決まってしまい、悲しみに暮れていますが頑張ってアドカレの記事を書きました。 この記事は株式会社ログラスProductチームの2022年12/18(日)の記事です。 株式会社ログラス Product チーム のカレンダー | Advent Calendar 2022 - Qiita なぜ今更Gradleかというと、最近社内で構築しているSheetlinというライブラリがあります。 ニッチな話になりますが、Sheetlin のインターフェース設計に関する話をKotlin Fest Reject Conference 2022でしてきたので、よろしければこちらもご覧ください。 そんなSheetlinですが、ビルドツールはGradleを利用しています。 私も雰
1. ULS Copyright © 2011-2021 UL Systems, Inc. All rights reserved. Proprietary & Confidential オンライン広告入札システムとZGC 2. ULS Copyright © 2011-2021 UL Systems, Inc. All rights reserved. Proprietary & Confidential 1 アジェンダ 1.自己紹介 2.この資料のねらい 3.ZGCへの期待 4.ZGCのパラメータチューニング 5.本番環境におけるZGCとG1GCの比較 6.まとめ
Googleが2023年8月21日に、Android Runtime(ART)のアップデートによりアプリの起動時間や実行速度を大きく向上させられるようにすると発表しました。ARTがOSとは独立して更新できるようになったことで、古いAndroidがインストールされているスマートフォンでもアプリのパフォーマンスが改善することが期待できます。 Android Developers Blog: Latest ARTwork on hundreds of millions of devices https://android-developers.googleblog.com/2023/08/latest-artwork-on-hundreds-of-millions-of-devices.html ARTは、Android OS上でアプリを実行する上で中核的な役割を担っているプログラム実行環境で、
Amazon Web Services ブログ Apache Log4j のためのホットパッチ ※この投稿は、2021年12月12日に公開された Hotpatch for Apache Log4j翻訳したものです。 CVE-2021-44228 により、広く使用されているオープンソースのロギングプラットフォームである Apache Log4j の脆弱性にパッチを適用、もしくは脆弱性の緩和のために忙しい週末を過ごされた方も多いかと思います。 影響を受けるアプリケーションを実行しているお客様は、この脆弱性に対処するために、Log4j をバージョン 2.15 にアップグレードすることをお勧めします。しかし、これは必ずしも迅速に実行できるとは限らないため、Corretto チームのメンバーは、脆弱な log4j デプロイメントをホットパッチするためのツールの構築に取り組みました。このツールは、Lo
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く