【技術選定を突き詰める】Online Conference 2025 の発表資料です。

要約 メモリ断片化は測定や診断が困難ですが、驚くほど簡単に修正できることもあります。マルチスレッドのCRubyプログラム(mallocのスレッド単位メモリアリーナ)におけるメモリ断片化の原因を追ってみましょう。本記事のボリュームは3343語、20分程度です。 単純な設定変更だけで問題を完全に解決できることはめったにありません。 私の顧客のSidekiqプロセスが大量のメモリを消費していたことがありました(1プロセスあたり1 GB程度)。開始当初の各プロセスは300MB程度でしたが、時間の経過とともにじわじわと肥大化してほぼギガバイトレベルにまで達したところで落ち着き始めました。 私は顧客にMALLOC_ARENA_MAXというたった1つの環境変数の変更を依頼しました。「2に設定してください」と。 プロセス再起動後、「じわじわ肥大化」現象はピタリと止みました。プロセスのメモリ使用量は以前の半
こんにちは,id:hanazukiです.松山で開催されたRubyKaigi 2025に何人かのKMC部員とともに参加し,Wi-Fiの構築・運用をやっていました.KMC活動ブログに記事を書くのは2023年のDNSリゾルバの記事ぶりです. 現地でも噂されてしまっていたようですが,今年のRubyKaigiでは15人いたNOCメンバーの過半数が会期中に体調不良でダウンするインシデントに見舞われてしまいました.私はどうやら風邪と食中毒を時間差でもらったようで,RubyKaigi本編もNOCの活動も満足に参加できず,たいへん残念でした.愛媛で買ってきたみかんを1週間くらい食べ続けていたら快復しました. さて,RubyKaigi 2025では,今年からの新しい試みとしてIPv6-mostlyネットワークを提供していました.IPv6-mostlyとは,464XLATと呼ばれるIPv6移行技術を対応クライア
こんにちは。スマートバンクでサーバーサイドエンジニアをやっております、@moznionです。 Webアプリケーションのパフォーマンスに問題が起きている時、みなさんはどのようにアプローチしていますか? 私はISUCONで培ったテクニックを使うことが多いように思います。 今回はそのような「ISUCONで学んだ知見」が役に立ったパフォーマンスチューニング事例があったのでそのご紹介をできればと思います。 背景と課題 スマートバンクではカード *1 決済をサービスとして提供しており、この決済が快適に行なえているかどうかはサービスの品質を捉える上で重要な指標となります。 そこで我々はこの決済処理にかかる処理時間を「決済レイテンシー」と定義して1.5秒のSLI *2 を設定し、エラーバジェットを設定して継続的な監視を行なっています。 SLI/SLOの設計・運用の詳細につきましては同僚の@maaaatoに
ISUCON 14 に id:utgwkk, id:wass80 と「ミレニアムサイエンススクール」というチーム名で参加した。 結果は 28875 点で 22 位!去年は fail して最下位だったので反省を活かすことができたのでは? 一昨年に Kibana / Elasticsearch / Filebeat で解析環境を組んでサクセスしていたが、今年は OpenTelemetry (Otel) をベースにモニタリング環境を作り直し、バックエンドは ClickHouse、フロントは Grafana の構成でやってみた。これがなかなか良かったので紹介。 コンテスト当日のアプリ改善周りは utgwkk の記事を見てください。 blog.utgw.net 序: ISUCON で必要な計測 ISUCON ではパフォーマンスを継続的に確認してボトルネックを探しながら改善していくのが王道ルート。 イ
先日、スマートバンク史上初となる生成AIを活用したプロダクトである「AIレシート読み取り機能」をリリースいたしました。この機能はざっくり言うと生成AI (本記事では「大規模言語モデル」と同じ意味として利用します) を用いてレシートの内容を解析し、店舗名や総額などを抽出しつつその支出カテゴリを推定してB/43アプリ内の家計簿に登録できるというものになります。なかなか良い感じにレシートを読み取ることができ、それだけでもなかなか楽しいのでまだお試しになられていない方は是非使ってみていただければ嬉しく思います。 b43.jp さて、そうして世に出たAIレシート読み取り機能なのですが、生成AIを始めて利用したプロダクト作りということもあり試行錯誤を重ねながらの開発となりました。本記事ではその過程で得られた知見について共有したいと思います。 なお、今回は技術的詳細に踏み込んだ話ではなくプロダクト作りそ
こんにちは、スマートバンクでモバイルアプリエンジニアをしているロクネムです。 書籍『INSPIRED 熱狂させる製品を生み出すプロダクトマネジメント』ではプロダクト開発には以下の4つのリスクがあると説明されています: 実現可能性のリスク: エンジニアが、持っている時間とスキルとテクノロジーで必要なものを作れるかどうか 価値のリスク: 顧客が購入するかどうか ユーザビリティーのリスク: ユーザーが使い方をわかるかどうか 事業実現性のリスク: ソリューションが、販売、マーケティング、財務、法律など、ビジネスのさまざまな分野でも問題がないかどうか (順番は入れ替えています 🙏) 同書では、優れた開発チームはこれらのリスクに対して開発の早い段階で取り組むと記されています。 自分はこれらのリスクのうち「実現可能性のリスク」「価値のリスク」「ユーザビリティーのリスク」の3つについてはモバイルアプリエ
こんにちは!スマートバンクのmitaniです。 だんだんと寒くなってきて年末の足音が聞こえてきましたね。スマートバンクでは10月25日から行われるKaigi on Railsで今年最後のブースを出展します。ブースではクイズに答えて全国各地の名産お菓子を掴み取りする企画をやるのでぜひ遊びに来てください。 今回のブログでは、ブースで使うクイズ画面のコーディングを完全にLLMに任せてみた取り組みを紹介しようと思います!果たしてLLMは期待通りのコーディングをしてくれるのか?気になる方はぜひチェックしてみてください! 作りたいもの ネプリーグというテレビ番組でやっている「パーセントバルーン」というクイズをご存知でしょうか?初めに100個のバルーンが残りライフとして与えられます。0~100の%で答えられるクイズが出題され、正解との誤差だけバルーンが破られていきます。そして最後に残ったバルーンの数を競
こんにちは。MySQLは秋の季語とする一派が世に存在していることを知り、私もMySQLに関わる記事を書いてみようと筆を取ることにしました。 さて、リレーショナルデータベースをバックエンドとするWebアプリケーション開発において、特定の条件に合致するレコードがN件だけ存在するかどうかを確認するロジックは頻出といえます。プログラマとして一度は書いたことがあるのではないでしょうか? この記事ではそのような件数カウントを行うためのクエリが引き起こした性能劣化と、その改善アプローチについて紹介していきます。 なお、本記事の内容はMySQLを前提としており、アプリケーションコードの例はRuby on Railsを用いますが特別な前提知識は必要ありません。コードの雰囲気だけ感じ取っていただければと思います。 ありがちなコード if query.count == n の問題 冒頭で述べた通り、特定の条件に
こんにちは。スマートバンクのサーバーサイドエンジニアをやっておりますid:moznionです。 すっかり秋めいてきましたね。秋といえばMySQL*1、ということで今回は先日解消した「MySQLのロックに起因するブロックタイムアウト」のトラブルシューティングついて記していきたいと思います。 事の発端 ある時を境にSentryに ActiveRecord::LockWaitTimeout というエラーがしばしば報告されるようになっていました。 SentryにActiveRecord::LockWaitTimeoutが上がってきている様子 Mysql2::Error::TimeoutError: Lock wait timeout exceeded という文言から、MySQL上でロックを取っている他のクエリにブロックされ、そのブロックが長時間に渡ったため自クエリがタイムアウトしてabortしてし
今北産業まとめ チェック制約ではSELECTが書けない 代わりにストアドファンクションを使う 最終手段なのでメインで多用するのはやめよう やりたいこと チェック制約でカラムの値をチェックしてバリデーションしたいことがある。 同じINSERTの値であればCASEで下記のような方法で対応することができる。 soudai.hatenablog.com しかしチェック制約ではSELECTによって事前のデータを確認することができない。 正しくRDBで対応しようと思うと正規化していけば実はできるのだけど、レコード数が増える。仕組みが複雑になるなどの理由で嬉しくない場合も多い。 例えば中学校の時間割とかがそうで、先生、教科の組み合わせと時間割を重複しないように管理する必要*1がある。 設計したことがない人はぜひ、設計してみてほしいのだけど、単純に先生テーブル、教科テーブル、時間割テーブルくらいで実装する
1971年東京生まれ。デイリーポータルZウェブマスター。主にインターネットと世田谷区で活動。 編著書は「死ぬかと思った」(アスペクト)など。イカの沖漬けが世界一うまい食べものだと思ってる。(動画インタビュー) 前の記事:モバイル監視カメラでなんでもわけありに > 個人サイト webやぎの目 ゴーストとは ゴーストとは暗いところでネオンなどを撮ったときに、意図してないところに出る光の反射のことだ。iPhoneは数世代前から出るようになった。 こういうの出ますよね テープ状に貼ってあるLEDは特に出る iPhoneのような狭いところに無理してレンズを入れているせいか、レンズのなかで光があっちゃこっちゃに反射しているようだ。 でも逆に考えたら、これを利用して夜空に模様を描くことができるんじゃないだろうか?
データベースアップグレード後の性能劣化、イヤですよね。 去る2023年某日、弊社ではAmazon Aurora MySQL 互換エディション 2 (MySQL 5.7 互換) から Aurora MySQL 互換エディション 3 (MySQL 8.0 互換) にアップグレードしました。当時の背景やアップグレードに関する知見は以下の記事をぜひ読んでみてください。 blog.smartbank.co.jp ソフトウェアバージョンアップをするとき、旧バージョンが抱えていた問題の解決などの恩恵を我々は期待します。しかし時には予期せぬデグレーションに遭遇することもあります。我々のMySQL 8.0へのアップグレード前後においてもいくつかの問題に遭遇しました。 本記事ではそんな問題の一つ、MySQL 8.0のオプティマイザが選択したセミジョイン最適化が性能劣化を引き起こした事例と解決方法について紹介し
こんにちは ハタ です。 Mirrativ では 2020年頃から サーバサイドの技術をPerlからGoへのシステム移行 を行っており、2024年現在でもサグラダファミリアのように移行作業は継続しています PerlとGoという2つの環境を同時に運用していますが、 基本的には 新機能は Go で実装 し、 Perlでは積極的に新規実装を行わない というスタイルで進めていました しかし、既存の機能の一部に手を加えたいとなった場合、まだまだ Perl の実装に手を加えることが一定あり、Perl から Go の機能を呼び出したいというニーズが出てきました (配信やギフトといったビジネスの根幹を支えるレガシーな実装においては顕著) そこで PerlXS を利用することで Perl から Go を直接呼び出せるようにできないかと考え検証を進めることにしました Goの -buildmode=c-shar
こんにちは。スタディサプリの小中新規開発チームで Web エンジニアをしている @YutaUra です。 去年の4月に新卒で入社をしまして約 1 年が経ちました。インターン生時代にもブログを書いているのでご興味あれば合わせてご覧ください。 GraphQL と Persisted Query スタディサプリ小中講座ではデータ通信に GraphQL を採用しています。 GraphQL を利用することで、クライアントはスキーマに定義された範囲で自由にデータを取得することができます。 query GetUser { user { name age } } また、 GraphQL はデータのグラフ構造に基づいて関連する複数のデータを一度に取得することができます。 query GetUser { user { name age posts { title content } } } GraphQL の
TiKV is a distributed, transactional key-value database. It has been widely adopted in many critical production environments — see the TiKV adopters. It has also been accepted by the Cloud Native Computing Foundation as a Sandbox project in August, 2018 and since then has moved to the Graduated project maturity level. TiKV is fully ACID compliant and features automatic horizontal scalability, glob
チバが亡くなるなんて思ってもみなかった。いまだに受け止められない。がんと闘っていたと聞いてはいても、絶対大丈夫だと勝手に思い込んでいた。 J-POPや渋谷系ポップが全盛で、真にロックなバンドの新たな系譜が久しく途絶えていた時期に突如現れたのがミッシェル・ガン・エレファントだった。そこから僕は取り憑かれたように何度も彼らにインタビューし、特にチバには長い時間に渡って食い下がるようなインタビューを何度も試みて、そのすべてをJAPANのページに刻んできた。 ミッシェルが登場したことで、日本の音楽シーンは一気にロックの色に染まっていった。だがべつに、ミッシェル以外に多くのロックバンドが登場して盛り上がったわけではない。ミッシェル・ガン・エレファントという一つのバンドの力で、それが起きたのだ。当時を知っている人には、それはわかるだろう。とてつもないバンドであり、事件ですらあった。 チバはその時、自分
参加しているプロジェクトで、RailsアプリのCIの高速化を行った。 まだ進行中の部分も幾つかあるが、結果から言うと、元々8分前後だったテストが3分半程度に短縮された。行った作業を幾つかの観点に分け、どのように高速化を行ったか、どの程度高速化されたか等を記述する。 プロセス数とマシン性能の調整 元々は2コア1プロセス4マシンで8分程度掛かっていたが、8コア8プロセス1マシンに変更することで5分程度に短縮された。 このプロジェクトではCIにGitHub Actionsを利用している。GitHub Actionsではデフォルトで2コアのマシンが利用されるが、Large runnerを利用して8コアに変更した。コア数を2倍にした代わりにマシン数も半分に減らしたので、結果的に費用は変わっていない。 また同時に、8プロセスで並列実行するためにparallel_testsを導入した。このプロジェクトで
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く