サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
会話術
serinuntius.hatenablog.jp
はじめに この記事は Go2 Advent Calendar 2018の記事です。 担当の10日より1時間ほど投稿が遅れてしまったことをお詫びします。 今回は、拙作のGo製のWebアプリケーションにSQLのクエリロガーを仕込めるOSS『graqt』 を紹介したいと思います。 過去に書いた記事を足して2で割ったような記事なので、graqtを知ってる方は読まなくてもいいと思います。*1 graqtとは github.com go-request-and-query-loggerです。 発音はガラクタでお願いします。 Go用のアクセスログとクエリのログを記録するためのhttp handlerミドルウェアで、そのログを解析するためのツールもついてます。 使い方 シンプルなWebアプリケーションの実装例 package main import ( "database/sql" "fmt" "math
以下のレポートは書いてる途中で力尽きてしまい不完全なものです・・・。あらかじめご了承ください。 2018/09/15(土)にISUCON8に参加して、ボロ負けしてきたのでそのレポートです。 SlackでのやりとりやGitHubのコードをベースに、時間ごとに何をやったかをざっくり書いていきたいと思います。 メンバー @serinuntius アプリケーション・エンジニア @dozen (会社の同期) インフラ・エンジニア @kazasiki (会社の先輩) アプリケーション・エンジニア 面倒なので、このレポートでは敬称略とさせていただきます。 10:00~10:30 ポータルログインして、レギュレーションを読む。同時にSSHのコンフィグを書いてました。 次のようなことを確認しました。 ベンチマーが側の帯域がかなりでかい! PHPは動かすのにH2Oのコンフィグ書き換えなきゃいけないのか〜大変そ
builderscon.io builderscon 2018 に 参加してきたので、レポート。 buildersconの良いところ 知識欲を満たせる豊富なカテゴリのセッション! その道に詳しい人によるハイレベルなセッション! 「知らなかった!」を絶対聞ける! 普段(使ってない|知らない)技術でも「ちょっと聞いてみよ」ができる 開催してる場所が日吉駅で、個人的にそこそこアクセスが良い buildersconのイマイチなところ ステッカーいらない問題(後述します) 人気のセッションが聞けなかったり、座れなかったりする(とはいえ、大体のセッションがYouTubeで公開されるはずなので、後で見れたりできるはず) ゆえに、発表後のQ&Aを聞かずに待機列に並ぶ人も・・・ 空間による制約のせいなので、全員VR上でカンファレンスすればいいのでは????(極端 自分のよかったところ チケットの販売が始まっ
ISHOCON2で惨敗して、悔しくてたまらなくてhttp2やnginxのことについてずっと調べたので、調査記録として残しておく。 serinuntius.hatenablog.jp 一番手軽で万能な「strace」 使い方 ざっくりと集計してボトルネックを探す 集計結果を元にあたりをつけて調査する 出すのは面倒だけどわかりやすい「FlameGraph」 インストール方法 使い方 HTTP 1.1 のときのグラフ HTTP 2 のときのグラフ 2つの調査結果から考えられる対策 まとめ 参考 一番手軽で万能な「strace」 straceとはprocessに直接アタッチして、システムコールを調査するためのコマンドです。 インストールも簡単で、使うのも簡単です。 しかも、どんなツールにも使うことができます。 しかし、読み解くのは難しいです。(個人的な感想です。) 使い方 ざっくりと集計してボトル
昨日(2018年8月25日)、ISHOCON2というISUCONの個人競技バージョンの大会に参加してきたのでレポートです。スコアが思うように伸びなかった方はぜひ読んでみてください。 ISHOCONとは ISHOCONの特徴 問題がコンテスト開催前からオープンであること 個人参加であること ベンチマーカーもオープンであること Go実装を選択してやったこと CSSをNginxで返す プロファイリングツール入れる templateを外に出す mysqlとnginxのコンフィグをgit管理するように GETのレスポンスは全部cacheする POST /vote のレスポンスもcacheする 投票をRedisに載せる Sorted Set 文字列型 都度メモリのアロケーションが走ると重そうなので、 POST /vote を中心にsync.Pool計画 ベンチマーカーとの戦い ~リアルISUCON~
こんばんは〜。 ISUCONの練習に励んでいる @_serinuntiusです。 自作のWebアプリケーションのボトルネック調査アプリケーションgraqtを書いていますが、もっと便利(?)なツールがあることを僕は知ってしまいました。 それがgo-torchです。 go-torchとは Tool for stochastically profiling Go programs. Collects stack traces and synthesizes them into a flame graph. Uses Go's built in pprof library. とのことで、goの組み込みのpprofというツールを使って、スタックトレースをプロファイリングして、炎のグラフ(?)を作成してくれるツールです。 このグラフが慣れると超読みやすくてボトルネックが簡単にわかります!(たぶん) g
「べ、別に土日早起き出来なかったからブログ書けなかったわけじゃないんだからね。。。」 冗談はさておき、土日はISHOCON2やgraqtの開発に力を入れてしまい、記事を書けませんでした。 いろいろ機能が追加されたので、紹介したいと思います。 新機能 Percentileが見れるようになりました graqtはbetter than alpを標語として、作っているのですが、alpにあるPercentileを移植しました。 P1, P50, P99とかのことです。 なんで、これが必要なのか調べていると、レスポンスタイムの平均(Avg)だけ見てしまうと、スロークライアントの結果に引っ張られる可能性があるからです。 参考 takeshiyako.blogspot.com Nginxの$request_timeは、nginxがリクエストを受けてからレスポンスをクライアントに返しきるまでの時間なので、変
今日から、朝5時に起きて、筋トレして7時に出勤して、始業の9時半までgraqtを書くことにした。夜は22時に寝る(つもり)。 1日3時間半程開発時間を取れるため、結構捗る。 進捗 午前中 ヘッダーを残したままスクロールする(結構考える必要があった) 今日のgraqtの進捗です。 スクロールできるようになりました。ちゃんとheaderを残しつつ、スクロールを実装したのがポイントです。https://t.co/6JZQyklKlP#golang #isucon #朝活 pic.twitter.com/lfubBmWUMt— serinuntius@5時起き (@_serinuntius) August 17, 2018 帰宅後 スクロールの実装 リファクタ query widgetの閉じる処理 graqt夜の部の進捗。 今日はGIFにしてみた。 query windowを表示したり、閉じたりで
最近ブログ書いてないので、graqtの進捗を1mmでも進んだら書くことにする。 graqtについては、以下の記事を参考にされたし。 一言で言うと、バカでも使えるGolang用のWebアプリのボトルネックを調査するソフトウェアです。主にISUCONをターゲットにしています。 serinuntius.hatenablog.jp github.com 進捗 現在、CLI部分を作っていて、見た目だけ少し動くようになった。 まだ、ログ部分とつなぎこみはしていない。 別日だけど、sketchでワイヤー作ったりもした。 めっちゃ雑に今作ってるISUCON用の解析ツールのCLIのデザインをsketchで書いてみた! CLIツールでもGUIの場合ワイヤー引いとかないと、いろいろ要件漏れちゃいそうだからな〜。 pic.twitter.com/d79CjFq5DO— serinuntius (@_serinun
6月の頭ぐらいから、ゲーミングPCとして利用していたタワー型の自作デスクトップを、サーバとして利用していた。 Mackerelで監視していたのだが、しばらくは安定して稼働していた。 しかし、ここ2週間ぐらいで不安定になってきた。ログとか見ても特に変なところがない。 連日の猛暑のせいで熱暴走しているっていう線も考えたけど、ほとんどCPU等はアイドルだし、温度を見てみてもそこまで異常値ではなかった。 このPCを組んでもう5年ぐらい経つので電源の寿命ではないかと思い、Amazonでポチって、サクッと換装したレポートだ。 古い電源を取り外す こんな感じのタワーだ。今から掃除するので寝かせている。 サイドパネルをサクッと開ける。 昔の電源はSilverStone ST75F-Pだ。 750wのフルプラグイン式で80 Plus Silverだ。 別に悪くなかったように思う、ただ単に寿命なのだろう。 電
表題の通りの事件に遭遇したので、一応記録として残しておきます。 環境 Flutter v1.5.4 Gradle 3.2.1 => 3.4.1 にあげようとした バージョンを上げようとした動機 Gradleのこととかよくわかってないのに、FirebaseでAndroid用の設定をしているときに、こんな画面が出た。 Recommendedか〜、なるほど〜〜〜という軽い気持ちでupdateを押したら、Gradleのタスクがコケるようになり涙目・・・。 解決方法 Android StudioとかをFlutterモードで使ってる場合はAndroidモードに1回しなくちゃ行けないっぽい? Androidモードに入るにはprojectRoot/android/build.gradleとかを Android Studioで開くと右上に、 Open for Editing in Android Studi
昨日モテるシェル芸とか言って、ブログ書いてたんですけど、 serinuntius.hatenablog.jp 実はGitHubのIssueのコメントが大量すぎて、Load more になっちゃってて、全部の画像をダウンロードできてなかったみたいです。 それをデザイナーに指摘されて、全部取ってこようと思ってGitHubのAPI見てたら、Headerに次のページのlinkが入っているという仕様で、シェルスクリプト書くぐらいならGoで書きたいな〜と思ってGoで書きました。 GitHubのTokenを取得する GitHubのパスワード認証だけだったらわざわざToken取得しなくてもいいんですけど、2段階認証している方はTokenの取得が必要となってきます。 https://github.com/settings/tokens にアクセスして、Tokenを取得します。 スクリプト GoのGitHub
おはようございます。 裏技ってつけると急にワザップ感が出て、懐かしいですよね〜。 こないだ飲み会で同期とそんな話をしておりました。 本題 ログインが必要なWebサイトで画像を引っこ抜いて欲しいという依頼があり、スクリプトを書くかな〜と迷ったんですが、よく考えたらシェル芸だけで出来るな〜と思ったので共有したいと思います。 今回はデザイナーにGitHubのIssueに貼ってある画像200枚以上をzipで欲しいって言われたので、それを題材にします。 環境 Chrome curl grep egrep やり方 1. Chromeでおもむろにデベロッパーツールを開く Macなら Shift + Cmd + c等で開けます。 2. networkを選択する そのページのリクエストを見つける たぶん、一番上のはず。 3. 右クリックして、Copy as cURLを選択 今回の肝はこれで、ブラウザで送った
ブログ書くの怠ってたから、カジュアルにアウトプットしていくぞ!!! 本題 環境 peco zsh(zshのグローバルエイリアスという機能を使っているみたいなのでzshしかできないと思います。) docker 手順 ~/.zshrc に以下を書くだけ alias -g C='`docker ps -a|peco| cut -d" " -f 1`' 使い方 docker logs C dcoker exec -it C bash これぐらいしか思いつかないけど、まあ便利
めっちゃ久しぶりのブログになってしまった。 書くことなんか何個でもあるのに、バタバタしてたりでアウトプットを疎かにしていた。(言い訳) 本題 少し前から気になってたことだったんだけど、go run main.go で実行すると、mainパッケージの別ファイルのグローバルな関数の呼び出しができない。 github.com 最小構成のリポジトリを作った。 これを、適当にcloneして、 go run main.go すると実行できない。 最小構成のサンプル作った。https://t.co/nvec9r5CYq pic.twitter.com/XEFZQaj9Ge— serinuntius (@_serinuntius) July 15, 2018 解決策 buildする。 go build -o main && ./main で buildすると実行できる。 どうしてもgo runしたいときの
昨日(2018年5月25日)行われた、kamakura.goのLTで以前から書いているGoのパッケージであるgraqt(がらくた)の紹介をしてきました。 前回のgraqtの記事 serinuntius.hatenablog.jp 発表資料 speakerdeck.com 登壇後に質問されたこととか (あいまいな)記憶と #kamakurago のハッシュタグを辿りながら書いてます。 Q. トレーサーのオーバーヘッドは? 5%以下の性能低下なら、良いよねってなんかの本で書いてたよ〜。 A. 実際、オーバーヘッドはあります。以前検証したベンチマークでは、以下のようなことがわかっています。 1リクエストで発行クエリが増えれば増えるほど、オーバーヘッドは大きくなる。(当たり前ですが) 1リクエストで、1クエリーだった場合のオーバーヘッドは、 ログあり1547.08 Requests/sec ログな
この記事でも書いたけど、ISUCON用のロガーを作ったので、そのログをパースするツールを書こうと思った。 serinuntius.hatenablog.jp 少しパフォーマンスを意識して書いてみたけど、きっともっとパフォーマンスが良くなる気がするのでマサカリウェルカムです。 パースするログ ベンチマークの見方 試行錯誤の歴史 毎行Unmarshal jsonのarrayを[]byteで作って、1回だけUnmarshal あらかじめファイルサイズ分のbyteを用意する bytes.Buffer使ってみる jsoniter使ってみる makeで行数分のRequestを作る 結論 まとめ おまけ 追記 お急ぎの方は 結論 にどうぞ。 パースするログ 今回パースするログはこんな感じのログでこれが何千行とあるのを想像していただければ。 {"level":"info","ts":1525134349.
はじめに この記事でも書いたけど、最近ISUCONの面白さに気づいた。 serinuntius.hatenablog.jp 社内ISUCONはRubyで書かれていたけど、本家ISUCONでは使用言語が選択できる。 そうなったら、今なら迷わずにGoを選ぶ。 それは、何故かと言うとGoが速いとかそういう理由よりも、GolandというIDEのおかげである。 こいつの補完やらなんやらがとても良くできているので、ソースを読むのも書くのも爆速になるからである。 RubyにもJetbrains製の Rubymine というのがあるけれど、動的言語だからか完全にはコードジャンプできない。 同名のメソッドがあったときには、選択肢が出てユーザにどのメソッドですか?みたいな感じで問いかける感じ。 けど、Golandは型があるからか100%の精度でコードジャンプできる。 そのおかげで、爆速コードリーディングが可能
昨日新卒研修向けの社内ISUCONがあり、ISUCON7の優勝者であるsuzukiくんとペアを組んで去年の新卒という枠*1で出させてもらった。*2 僕のISUCONレベルは、社内ISUCONを新卒研修のときに1回やったことがある程度で、レベル5まであるとすれば僕は確実に1ですね。一度やったことがあるというだけですw レベル1の僕が学んだことなので、ISUCONの常連さんには当たり前のことなのかもしれませんが、順番に書いていきたいと思います。 今回のお題 学んだ12のこと 準備を爆速で終わらせる 初期ベンチ回してアタリを付ける 静的ファイルの配信をnginxでする 分析基盤を作る 静的ファイルのキャッシュ ループクエリ撲滅 テーブルの非正規化 ボトルネック以外を修正する意味の薄さ 最終ベンチでFailしたらダメ!!! お互いを信じる!! MySQL(RDBMS)遅くない! Dockerがネッ
via GIPHY tl;dr 大規模なプロジェクトでコード書いてると、「なんでこういう設計になってるのか」とか「当時はどういう仕様だったのか」みたいなのを知りたいことがよくある。 そういったときに、プルリクエストを見ることで知りたい情報を手に入れられることがある。 この行のプルリクエストをみたいな〜と思ったときに、参考にあるCommit Hashから調べる方法で解決していたのだけど、Commit Hashを調べてコピーして git openpr <commit hash> ってやるのが手間だな〜と思ったので一発でこれができるコマンド(blamepr)を作った。 依存ツール 両方brewで入る hub peco 設定 ~/.gitconfigに↓を追記する。 別にblamepr という名前じゃなくてもいい。自分で好きな名前にしてください。 [alias] openpr = "!f() {
YAPC::Okinawa 2018でベストLT賞に選んで頂いた 1ヶ月前までRuby書いてたのに、気づいたら沖縄でPerlのLTをしていた そんな感じ。紆余曲折を経てこうなった。 この記事は、自分が発表者として書いた記事で、聞いた側の記事はこちらに書いた。 資料 新卒Rubyistが1ヶ月でPerl Mongerになった話 from serinuntius www.slideshare.net LTをして得たもの LTに参加していろいろなものを得たので紹介したい。 Kindle Oasis 唯一の物理枠。スポンサーのCOLSIS様からKindle Oasisを頂いた。 1ヶ月程前にKindle PaperWhiteを買って、「超いいぞ」ってなってたのでめっちゃ嬉しい。COLSIS様、ありがとうございます。 承認欲求の満たされた感 懇親会でお話させていただいたり、Twitterやブログを観
めんそーれ ある日突然、社内のSlackの#Perlチャンネルで若者2名に「交通費出すからYAPCに行きませんか〜」とmacopyさんからメンション飛んできて、僕の方が反応するのが早かったというだけで参加が決まったw 聞いて来たセッション Webサービスを監視するときに僕達が考えたこと speakerdeck.com とりあえず、僕達が考えたこと って付けとけば通る 社内で障害を共有する文化 CPU利用率がずっと5%なのも障害 => 本来の性能を使い切れてない CPUのメトリックの見方とかあんまりわかってない勢だったから、勉強になった。 社内で障害の知見を共有するの大事だよな〜 事業部越えてはなかなかしてないかな〜 #yapcjapan #yapcjapanB— serinuntius (@_serinuntius) 2018年3月3日 GraphQL をプロダクション導入した結果 spe
このページを最初にブックマークしてみませんか?
『ps aux | grep serinuntius』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く