サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
大そうじへの備え
matsumana.info
Node.jsを運用していて、以下のような問題が発生した事はないでしょうか? Node.jsのheapの使用量が増加し続ける (使い終わっても開放されないゴミが残っている) Node.jsが突然スタックする そんな時に役に立つツールをいくつか紹介します。 ※この記事で紹介しているツールのサンプルコードを以下に置いています https://github.com/matsumana/nodejs-dump-example Node.jsの heapの使用量が増加し続ける heap dumpを取って解析してみましょう。 heap dumpの取り方 以下のように実装すると、シグナルを受け取った時にheap dumpを取れるようになります。 この例では SIGUSR1 を使ってハンドリングしてますが、他のシグナルでも良いです。 import v8 from 'v8'; import fs from
2021年になってJavaScript、TypeScript、Node.jsの勉強を始めました。 この記事では、読んで良かった本、記事、公式ドキュメントなどをまとめていきます。 ※2021/03時点の情報です。 個人的なリンク集ですが、「これも読むと良いよ」というものがあればぜひ教えてください。 ECMAScript ECMAScriptの仕様は、EcmaのTC39で策定されている Ecma TC39 GitHub organization ep78 TC39 | mozaic.fm Node.jsの各バージョンでのECMAScriptサポート状況 JavaScript Misreading Chat - #86: JavaScript: the first 20 years JavaScript 二十年の歴史についての回 JavaScript チュートリアル | MDN JavaScri
JSUGスタッフの方にお声がけ頂いて、JSUG勉強会 2020年その6 LT大会!で「Spring BootユーザのためのArmeria入門」というタイトルでLTしました。 発表資料はこちらです。 発表で使ったサンプルアプリはここに置いています。 https://github.com/matsumana/armeria-example-for-jsug Youtube録画もあります。 https://www.youtube.com/watch?v=a7TDu8aOSUw&feature=youtu.be&t=71 Armeriaとは? ArmeriaはLINE社がOSSとして開発しているマイクロサービス向けのフレームワークです。 JavaやSpringユーザの皆さんにとってはおなじみのNettyというOSSがありますが、NettyプロジェクトのFounderであるTrustinさんが今はL
これは Kubernetes3 Advent Calendar の 8日目の記事です。 はじめに k8sのモニタリングの手段はいくつかあると思いますが、Prometheusにもk8sサービスディスカバリ機能があるのでk8sのモニタリングを行う事が出来ます。 Prometheusの公式ドキュメント サンプル設定ファイル Prometheusをk8sクラスタ内にデプロイしてモニタリングするには、Prometheusの設定をk8sのConfigMapに書き、Volume経由でPrometheusのPodに渡して使うと良いでしょう。 Manifestファイルの例 k8sクラスタの外にあるPrometheusからk8sクラスタ内のPodのメトリクスを収集したい ここからがこの記事の本題です。 動機 僕は普段Prometheusを使って自分たちのサービスをモニタリングしていますが、Prometheus
だいぶ前になりますが、Javaコミュ@福岡 勉強会1910で「Micrometer入門」というタイトルで発表してきました。 僕の発表資料はこちらです。 発表で使ったサンプルアプリはここに置きました。 https://github.com/matsumana/micrometer-example Micrometerとは? Javaでメトリクスを取るためのライブラリです。 現在、世の中には沢山のモニタリングサービス/ツールが存在しますが、アプリケーション側で依存ライブラリを切り替えるだけで様々なモニタリングサービス/ツールに対応する事が出来ます。 Micrometerのオフィシャルサイトで述べられているように、JavaのロギングライブラリのSLF4Jのようなイメージです。 Spring Boot Actuatorでもだいぶ前から採用されているので、既にお馴染みという感じがありますね。 Off
最近、JDKの話題をTLで見ることが増えましたね。 どれを使えばよいのかは人それぞれだと思いますが、以下をひと通り読むと良さそうです。 今後のJavaのサポートやアップデートについてJavaチャンピオンが執筆したドキュメント、Java is Still Freeの日本語訳を公開 (2019年4月時点)JVM言語を使う方がどのJDK/JVMを使うか?アンケートと考察まとめ 有償化やEOLに関して誤解があるけど、様々なクラウドやサービス系企業でJava/JVMが使われ続けてるよって話 Red HatがOpenJDK 8 / 11 LTSの修正を主導することへの見解や反響 OpenJDK 8u212/11.0.3 LTS以降でのリリースノートや脆弱性の追い方 「Java 有償化」で誤解する人になるべく分かりやすく説明するためのまとめ OpenJDK まとめ(2019年5月6日版) JDKの新しい
個人的にJava 11で一番嬉しい新機能はFlight Recorderです。 Flight RecorderはOracle JDK 7u40から使える有償機能でしたが、OSS化されJava 11からOpenJDKに入りました。 (Flight Recorderは元々JRockitに搭載されていたもので、JRockitがHotSpot VMに統合されたのが7u40らしい) Mission ControlもOSS化されていますが、OpenJDKには含まれていないので別途ダウンロードが必要です。 JDKの新しいリリース・モデル および提供ライセンスについて JEP 328: Flight Recorder JDK Mission Control 7 JMC ダウンロードページ ※2018/10/15現在、バージョンは「7 Early-Access」です。GAは2019/01/30の予定 Jav
Java 9から含まれているjlinkを使うと、必要なモジュールだけに絞ってコンパクトなランタイムを作る事ができるので、アプリをコンテナで動かす時は便利そうです。 JEP 282: jlink: The Java Linker http://openjdk.java.net/jeps/282 Java Day Tokyo 2018でこれに関するセッションがあり、スライドと動画が公開されています。 jlinkで実際どのくらい小さくできるのか�例が出されているので、おすすめです。 Java in a World of Containers https://www.oracle.com/technetwork/jp/ondemand/online2018-javaday-4489556-ja.html OpenJDK 11でjlinkを試してみたところ、jlinkで生成したランタイムのサイズがめ
Micrometer (micrometer-core)には、Javaでよく使われるライブラリ、ミドルウェア、JVM自身のメトリクスを収集するためのBinderと呼ばれるClassと、その設定を行うAutoConfigurationが含まれているので簡単にメトリクス収集を始める事ができます。 (ちなみに、MicrometerはJMXには依存してないので、JVMオプションでJMXを有効する必要はありません) それらをいつくか紹介してみようと思います。 なお、この記事で使用しているバージョンは以下です。 (2018/05/23現在の最新) Spring Boot: 2.0.2 or 1.5.13 Spring Boot spring-boot-starter-actuator Micrometer: 1.0.4 micrometer-core micrometer-spring-legacy
今の会社に転職してちょうど3年間というキリの良いタイミングなので、振り返ってみようと思ったけど、 よく考えてみると歳も40歳だし、働き始めて20年という何か色々キリが良かったので、今までのエンジニア人生をざっくりと振り返ってみようと思います。 (なお、このブログエントリーは個人的なチラ裏メモなので、読んでも得る物は特に無いです) 僕は新卒から今まで20年間ずっと福岡で仕事をしています。 東京のマンスリーマンションに泊まるような長期出張は若い頃に何回か経験していますが、生活の拠点はずっと福岡です。 最初の会社 SIerのn次請け案件がメインの会社で、20歳の頃から8年間勤務。 SIerはとても大切な業種だと思うのですが、僕が経験したようなn次請け案件だと良い仕事はあまり無かったです。 仕様の不備が発覚したり変更などが発生すると、�それに関わる費用をどこの会社が負担するか必ずモメる システムを
Mackerel User Group主催でモニタリング勉強会が開催され、 同じチームで仕事をしている@kfdmと一緒にPrometheusについて発表してきました。 皆様ありがとうございました。 Mackerel User Group主催の勉強会でしたが、「Prometheus使っている方?」という質問をしてみたら20人くらいの方に手を上げて頂けました。 僕個人としても、最近は日本国内でもPrometheusへの関心が高まっている雰囲気を感じています。 OpenMetricsのような動きもあるし、MicrometerのようにPrometheusを標準サポートするライブラリや、 KubernetesのようにPrometheusのフォーマットでメトリクスをexportするミドルウェアも今後増えていくと思います。 今後もますます盛り上がって行きそうですね。 イベントページ https://ma
「Elasticsearch勉強会 in 福岡 2017」が開催されました。 僕も少し前にElasticsearchに入門して現在とあるサービスの運用に携わっているので、30分枠で発表してきました。 イベントページ https://www.meetup.com/ja-JP/Tokyo-Elastic-Fantastics/events/243510590 感想 @johtaniさんから、Elastic Stack 6.0の新機能紹介、5.x系からの移行の話や、 @nakalyさんから、複雑なSQLになってしまったMySQLによる検索機能をElasticsearchに移行して大幅にレイテンシを改善した話が聞けました。 さらに、発表内容に対して@johtaniさんから指摘や補足説明もあるという充実ぶり。 とても学びの多い勉強会でした。発表して本当によかったです。 ありがとうございました。 スラ
virtualenvでAnsible実行環境を作る方法です。いつも忘れてしまうのでメモ。 注意点 このページのコマンドはCentOS7環境での例です。CentOS6や他のディストーションを使っている人は適宜読み替えてください 2017/08現在、AnsibleはPython3未対応なのでPython2を使いましょう virtualenvをインストールする これはAnsible固有ではなく、普通のvirtualenvインストール方法です。 [vagrant@centos7 ~]$ sudo yum install -y python-devel [vagrant@centos7 ~]$ sudo yum install -y --enablerepo=epel python2-pip [vagrant@centos7 ~]$ sudo pip install --upgrade pip [v
HikariCPは人気のあるコネクションプールライブラリの一つです Spring Bootからも簡単に使えるようになっています こんな感じ @Configuration public class AppConfig { @Bean(destroyMethod = "close") public DataSource dataSource() { final HikariDataSource ds = new HikariDataSource(); ds.setDriverClassName(driverClassName); ds.setJdbcUrl(jdbcUrl); ds.setUsername(userName); ds.setPassword(password); return ds; } } コネクションプールのベンチマークは以前取りました。ご参考まで Spring Bootの
Spring Boot 1.3で追加されたDevToolsを使うと、hot deploy(アプリを起動した状態でソースの修正を反映させる)が出来るようになります DevToolsのhot deployは100%成功はしないのですが、有効にしておくと便利です ですが、Doma2を組み合わせて使う場合は設定をカスタマイズしておかないとクラスローダーの問題でハマる事になります DevToolsのhot deployのしくみ DevToolsはクラスローダーを2つ用意します 開発しているアプリケーションのclassをロードするクラスローダー 依存ライブラリ(jarファイル)のclassをロードするクラスローダー ソースが修正されたらアプリケーションのclassをロードするクラスローダーだけを破棄して作り直す事でhot deployを実現しています (依存ライブラリはアプリ起動中に変更が入らないので
僕はDropwizard使った事ないんですが、DropwizardでもServer::Starterを使ってhot deploy出来たら便利かも知れないと思ったので、 プルリクを送ってみたらマージしてもらえました。 次にリリースされる、1.0.0に含まれます。 Dropwizardの設定としては、yamlファイルに以下のようにinheritChannel: trueって書くだけでOKです。 server: type: simple connector: type: http port: 8080 inheritChannel: true Server::Starterのしくみや設定については以下を読んでください。 Server::Starterから学ぶhot deployの仕組み Server::Starter を Java で利用する方法。または、System.inheritedChan
僕はフロントエンドまわりの技術には疎いのですが、Reactは今も人気が高いように見えます サーバサイドでReactを使ってページのレンダリング(サーバサイドレンダリング)を行ったりもするようで、 そうすればサーバサイドとフロントエンドで処理が共通化出来て便利そうです JavaでReactのサーバサイドレンダリングをやるならNashornを使う事になり、パフォーマンスが気になったのでベンチマークを取ってみました アプリのソース ソースは以下になります (ISUCON4のJava実装です) Spring Boot + Thymeleaf テンプレートエンジンにSpring Bootでよく使われているThymeleafを使ったバージョン Spring Boot + Handlebars.js テンプレートエンジンにHandlebars.jsを使ったバージョン Spring Boot + EJS
この記事は、Java Advent Calendar 2015 の 18 日目の記事です。 昨日は @mdstoy さんの で、結局 Optional のインスタンスに対して ifNotPresent 的なことをやりたいときはどうしたらいいんですか? でした。 明日は @maaya8585 さんです。 みなさんはWeb APIの呼び出しはどのライブラリを使ってますか? Apache HttpComponents JAX-RS Client Jersey Client jetty-client OkHttp Retrofit Feign 自作ライブラリ などなど、色んな選択肢がありますよね。 (Retrofitは内部でOkHttpが使われているみたいだし、FeignもClientとしてOkHttpを使う事が出来るみたいです) 僕はここ数年Jersey Clientを使ってて特に不満はなかった
ずいぶん間が空いてしまいましたが約1年ぶりにVol.5を開催しました。 イベントページ → MySQL Casual Talks in Fukuoka vol.5 僕はFabricとRouterの紹介とデモをやりました。 Routerは今後の機能追加に期待です! 発表スライド、動作確認に使ったconfigとソースコードは以下です。 config Vagrant + Itamaeなので、動く環境がすぐに作れます ご興味あればお試しください MySQL Fabricに対応してるConnector/Jを使ってデータをいじるサンプル 最後に 会場をご提供頂いたLINE Fukuoka様、発表して頂いた皆様、ご参加頂いた皆様、ありがとうございました! 次回もぜひご参加ください!
オンラインで開催されたISUCON5予選(2日目)に、ueneidさん、nakashinさんと参加しました チーム名は「チームエイヂィ」です 言語はPerlを選択して、最終スコアは10147でした (予選通過ラインが14000弱なので4000くらい足りない。。。) 当日の作業分担 ueneidさん、nakashinさんにはアプリ改修をやってもらい、 僕はサーバの初期セットアップとインフラを担当。後からアプリ改修作業に合流という流れ 作業しやすいようにサーバは1人1台ずつ立てて、僕のサーバに他の2人の変更をマージしていきました 当日の作業内容まとめ カーネルパラメータチューニング ファイルディスクリプタ数チューニング MySQLチューニング Nginxチューニング memcachedインストール PerlのサーバをGazelleに入れ替え relationsとfootprintsにインデック
@tokuhiromさんのブログエントリーを読んで、maven-git-commit-id-pluginの存在を知りました。 [java] どのブランチから作られた jar かをわかりやすくしたい @makingさんから、Spring Bootなら依存を足すだけで情報が取れるようになるよと教えて頂いたので早速試してみました。 @matsumana Spring Bootならgit plugin入れてビルドするだけでActuatorのinfoエンドポイントでリビジョンとブランチメンテが取れます! — Toshiaki Maki (@making) February 5, 2015 pom.xmlはこんな感じ。 spring-boot-starter-actuatorとgit-commit-id-pluginを追加します。 <dependencies> <dependency> <groupI
先日の Spring Bootで選択できるアプリケーションサーバの比較 に続いて、コネクションプーリングの比較をやってみました。 Sprinb Boot 1.2.0 RC2で標準で選択出来るコネクションプーリングは以下です。 ※この4つ以外は使えない訳ではありません。pom.xmlに書けば何でも使えるようになります。 Tomcat JDBC Connection Pool (Spring Bootのデフォルト) HikariCP Commons DBCP Commons DBCP2 比較に使ったアプリ 比較に使ったアプリは、 以前作ったISUCON4予選のSpring Boot実装 です。 ソースはここに置いてます。 サーバはISUCON運営チーム公開の公式AMIを使ってます。 AMI IDはこちらのページを参照してください。 ISUCON4 予選問題の解説と講評 & AMIの公開 公開さ
Spring Boot 1.2.0 RC2でUndertowが選択できるようになり、アプリケーションサーバの選択肢が3つになりました。 Tomcat Jetty Undertow 起動時間やパフォーマンスの比較をしたので、まとめておきます。 比較に使ったアプリは、 以前作ったISUCON4予選のSpring Boot実装 です。 ソースはここに置いてます。 サーバはISUCON運営チーム公開の公式AMIを使ってます。 AMI IDはこちらのページを参照してください。 ISUCON4 予選問題の解説と講評 & AMIの公開 公開されたAMIと上記のソースのままでは、DBサーバがボトルネックになっていて、Javaアプリのパフォーマンス比較が出来ないので @kazeburoさんのこちらのブログエントリーにある設定を行い、ボトルネックを取り除いた状態にして比較しました。 ※僕が作ったSpring
僕はJavaも好きなので、ISUCON4予選問題のJava実装を作ってみました。 フレームワークには最近Java界隈で話題のSpring Bootを使っています。 ISUCON興味あるんだけど、Java実装が無かったので参加しなかったという方や、Spring Bootに興味がある方はぜひ試してみてください! MySQLのCREATE文やINSERT文も含まれていますので、アプリを動かすだけであればローカル環境で動きます。 ソース GitHubに置いてます アプリケーションの起動方法 アプリケーションサーバが組み込まれるので、サーバにTomcatなどをインストール・設定する必要はありません。 Java8をインストールして、jarファイルを実行するだけです。 (アプリケーションのビルドにはMavenを使います) ビルド $ mvn clean package 実行 $ java -jar /p
オンラインで開催されたISUCON4予選(1日目)に、同僚でフロントエンドエンジニアの@itoKami1123さんを誘って2人で参加しました。 チーム名は「キャム☆マックス」です。 言語はRubyを選択して、最終スコアは20835でした (workload=5) 当日までの準備 過去問題(ISUCON3)を実際に2人でやってみた。 1ヶ月間くらいかけて昼休みの時間を利用して以下を勉強 ISUCON3のソースコードリーディング ISUCON3の解説ブログを読む MySQL(インデックスと実行計画まわり) Ruby(入門) 事前に公開されたレギュレーションをよく読む チームの方針 インフラはNginxとUnicornとMySQLのチューニングを行うのみにして、コード改修に時間をかける。 (SQL、インデックス、ロジックの見直しをきちんと行えばスコアは上がるという考えです) 各種設定ファイルは事
次のページ
このページを最初にブックマークしてみませんか?
『matsumanaの技術メモ』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く