タグ

ブックマーク / serinuntius.hatenablog.jp (16)

  • #isucon 8 で 惨敗してきました - ps aux | grep serinuntius

    以下のレポートは書いてる途中で力尽きてしまい不完全なものです・・・。あらかじめご了承ください。 2018/09/15(土)にISUCON8に参加して、ボロ負けしてきたのでそのレポートです。 SlackでのやりとりやGitHubのコードをベースに、時間ごとに何をやったかをざっくり書いていきたいと思います。 メンバー @serinuntius アプリケーション・エンジニア @dozen (会社の同期) インフラ・エンジニア @kazasiki (会社の先輩) アプリケーション・エンジニア 面倒なので、このレポートでは敬称略とさせていただきます。 10:00~10:30 ポータルログインして、レギュレーションを読む。同時にSSHのコンフィグを書いてました。 次のようなことを確認しました。 ベンチマーが側の帯域がかなりでかい! PHPは動かすのにH2Oのコンフィグ書き換えなきゃいけないのか〜大変そ

    #isucon 8 で 惨敗してきました - ps aux | grep serinuntius
    serinuntius
    serinuntius 2018/09/24
    途中ですが公開しました。(たぶん、このままだと一生公開しないと思ったので
  • builderscon 2018に行ってきたよ - ps aux | grep serinuntius

    builderscon.io builderscon 2018 に 参加してきたので、レポート。 buildersconの良いところ 知識欲を満たせる豊富なカテゴリのセッション! その道に詳しい人によるハイレベルなセッション! 「知らなかった!」を絶対聞ける! 普段(使ってない|知らない)技術でも「ちょっと聞いてみよ」ができる 開催してる場所が日吉駅で、個人的にそこそこアクセスが良い buildersconのイマイチなところ ステッカーいらない問題(後述します) 人気のセッションが聞けなかったり、座れなかったりする(とはいえ、大体のセッションがYouTubeで公開されるはずなので、後で見れたりできるはず) ゆえに、発表後のQ&Aを聞かずに待機列に並ぶ人も・・・ 空間による制約のせいなので、全員VR上でカンファレンスすればいいのでは????(極端 自分のよかったところ チケットの販売が始まっ

    builderscon 2018に行ってきたよ - ps aux | grep serinuntius
    serinuntius
    serinuntius 2018/09/09
    参加レポート書きました!最高なカンファレンスありがとうございました! #builderscon
  • 一歩踏み込んだnginxのプロファイリングをする - ps aux | grep serinuntius

    ISHOCON2で惨敗して、悔しくてたまらなくてhttp2やnginxのことについてずっと調べたので、調査記録として残しておく。 serinuntius.hatenablog.jp 一番手軽で万能な「strace」 使い方 ざっくりと集計してボトルネックを探す 集計結果を元にあたりをつけて調査する 出すのは面倒だけどわかりやすい「FlameGraph」 インストール方法 使い方 HTTP 1.1 のときのグラフ HTTP 2 のときのグラフ 2つの調査結果から考えられる対策 まとめ 参考 一番手軽で万能な「stracestraceとはprocessに直接アタッチして、システムコールを調査するためのコマンドです。 インストールも簡単で、使うのも簡単です。 しかも、どんなツールにも使うことができます。 しかし、読み解くのは難しいです。(個人的な感想です。) 使い方 ざっくりと集計してボトル

    一歩踏み込んだnginxのプロファイリングをする - ps aux | grep serinuntius
    serinuntius
    serinuntius 2018/08/28
    nginxが高負荷になっている理由がわからなかったので、ちゃんと調査してみた!こんな調査しなくても、できるエンジニアなら経験からわかるんだろうけど、「推測するな、観測せよ」の精神でちゃんと調べてみたので是非
  • ISHOCON2というISUCONの個人大会で惨敗してきました【優勝スコアと同等の参考実装付き】 - ps aux | grep serinuntius

    昨日(2018年8月25日)、ISHOCON2というISUCONの個人競技バージョンの大会に参加してきたのでレポートです。スコアが思うように伸びなかった方はぜひ読んでみてください。 ISHOCONとは ISHOCONの特徴 問題がコンテスト開催前からオープンであること 個人参加であること ベンチマーカーもオープンであること Go実装を選択してやったこと CSSNginxで返す プロファイリングツール入れる templateを外に出す mysqlnginxのコンフィグをgit管理するように GETのレスポンスは全部cacheする POST /vote のレスポンスもcacheする 投票をRedisに載せる Sorted Set 文字列型 都度メモリのアロケーションが走ると重そうなので、 POST /vote を中心にsync.Pool計画 ベンチマーカーとの戦い ~リアルISUCON~

    ISHOCON2というISUCONの個人大会で惨敗してきました【優勝スコアと同等の参考実装付き】 - ps aux | grep serinuntius
    serinuntius
    serinuntius 2018/08/26
    かなり力入れて書いたので、スコアが伸び悩んだ人はぜひ読んでみてください! ほぼ優勝スコアである25万点の解答です。質問等あればお気軽にどうぞ! #scouty_ishocon
  • Goのボトルネック調査にgo-torchがめっちゃ良い - ps aux | grep serinuntius

    こんばんは〜。 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

    Goのボトルネック調査にgo-torchがめっちゃ良い - ps aux | grep serinuntius
    serinuntius
    serinuntius 2018/08/21
    ISUCONのボトルネック調査に役立ちそうなツールを発見したので書きました!
  • 【3,4日目】graqt開発日誌 ~PercentileとStddev(標準偏差)~ - ps aux | grep serinuntius

    「べ、別に土日早起き出来なかったからブログ書けなかったわけじゃないんだからね。。。」 冗談はさておき、土日はISHOCON2やgraqtの開発に力を入れてしまい、記事を書けませんでした。 いろいろ機能が追加されたので、紹介したいと思います。 新機能 Percentileが見れるようになりました graqtはbetter than alpを標語として、作っているのですが、alpにあるPercentileを移植しました。 P1, P50, P99とかのことです。 なんで、これが必要なのか調べていると、レスポンスタイムの平均(Avg)だけ見てしまうと、スロークライアントの結果に引っ張られる可能性があるからです。 参考 takeshiyako.blogspot.com Nginxの$request_timeは、nginxがリクエストを受けてからレスポンスをクライアントに返しきるまでの時間なので、変

    【3,4日目】graqt開発日誌 ~PercentileとStddev(標準偏差)~ - ps aux | grep serinuntius
    serinuntius
    serinuntius 2018/08/20
    ISUCONが近づいてきて、実装速度がどんどん上がっていますw レスポンスボディのサイズや、Ginに対応したり、Pathの集約機能を追加したり、土日で結構使い物になるようになってきました。 今後共、開発を続けていきます!
  • 【2日目】graqt開発日誌 ~GolangでスクロールできるCLIを作る~ - ps aux | grep serinuntius

    今日から、朝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を表示したり、閉じたりで

    【2日目】graqt開発日誌 ~GolangでスクロールできるCLIを作る~ - ps aux | grep serinuntius
    serinuntius
    serinuntius 2018/08/17
    書いた!!!
  • 【1日目】graqt開発日誌 ~GolangでリッチなCLIを作る~ - ps aux | grep serinuntius

    最近ブログ書いてないので、graqtの進捗を1mmでも進んだら書くことにする。 graqtについては、以下の記事を参考にされたし。 一言で言うと、バカでも使えるGolang用のWebアプリのボトルネックを調査するソフトウェアです。主にISUCONをターゲットにしています。 serinuntius.hatenablog.jp github.com 進捗 現在、CLI部分を作っていて、見た目だけ少し動くようになった。 まだ、ログ部分とつなぎこみはしていない。 別日だけど、sketchでワイヤー作ったりもした。 めっちゃ雑に今作ってるISUCON用の解析ツールのCLIのデザインをsketchで書いてみた! CLIツールでもGUIの場合ワイヤー引いとかないと、いろいろ要件漏れちゃいそうだからな〜。 pic.twitter.com/d79CjFq5DO— serinuntius (@_serinun

    【1日目】graqt開発日誌 ~GolangでリッチなCLIを作る~ - ps aux | grep serinuntius
    serinuntius
    serinuntius 2018/08/16
    【1日目】graqt開発日誌 ~GolangでリッチなCLIを作る~
  • 【自宅鯖】自作PCの電源を換装する【オウルテック Seasonic SSR-650FM】 - ps aux | grep serinuntius

    6月の頭ぐらいから、ゲーミングPCとして利用していたタワー型の自作デスクトップを、サーバとして利用していた。 Mackerelで監視していたのだが、しばらくは安定して稼働していた。 しかし、ここ2週間ぐらいで不安定になってきた。ログとか見ても特に変なところがない。 連日の猛暑のせいで熱暴走しているっていう線も考えたけど、ほとんどCPU等はアイドルだし、温度を見てみてもそこまで異常値ではなかった。 このPCを組んでもう5年ぐらい経つので電源の寿命ではないかと思い、Amazonでポチって、サクッと換装したレポートだ。 古い電源を取り外す こんな感じのタワーだ。今から掃除するので寝かせている。 サイドパネルをサクッと開ける。 昔の電源はSilverStone ST75F-Pだ。 750wのフルプラグイン式で80 Plus Silverだ。 別に悪くなかったように思う、ただ単に寿命なのだろう。 電

    【自宅鯖】自作PCの電源を換装する【オウルテック Seasonic SSR-650FM】 - ps aux | grep serinuntius
    serinuntius
    serinuntius 2018/07/21
    ここのところ不調だった自宅鯖の電源を換装してみた!今の所かなり安定稼働してる!
  • 【Golang】GitHubのAPIでIssueのコメントを全件取ってくるスクリプト - ps aux | grep serinuntius

    昨日モテるシェル芸とか言って、ブログ書いてたんですけど、 serinuntius.hatenablog.jp 実はGitHubのIssueのコメントが大量すぎて、Load more になっちゃってて、全部の画像をダウンロードできてなかったみたいです。 それをデザイナーに指摘されて、全部取ってこようと思ってGitHubAPI見てたら、Headerに次のページのlinkが入っているという仕様で、シェルスクリプト書くぐらいならGoで書きたいな〜と思ってGoで書きました。 GitHubのTokenを取得する GitHubのパスワード認証だけだったらわざわざToken取得しなくてもいいんですけど、2段階認証している方はTokenの取得が必要となってきます。 https://github.com/settings/tokens にアクセスして、Tokenを取得します。 スクリプト GoGitHub

    【Golang】GitHubのAPIでIssueのコメントを全件取ってくるスクリプト - ps aux | grep serinuntius
    serinuntius
    serinuntius 2018/07/20
    モテるシェル芸、実は失敗してたので、Goでやり直しました!!
  • 【裏技】みんな知らないログイン必須ページの爆速スクレイピング【モテるシェル芸】 - ps aux | grep serinuntius

    おはようございます。 裏技ってつけると急にワザップ感が出て、懐かしいですよね〜。 こないだ飲み会で同期とそんな話をしておりました。 題 ログインが必要なWebサイトで画像を引っこ抜いて欲しいという依頼があり、スクリプトを書くかな〜と迷ったんですが、よく考えたらシェル芸だけで出来るな〜と思ったので共有したいと思います。 今回はデザイナーにGitHubのIssueに貼ってある画像200枚以上をzipで欲しいって言われたので、それを題材にします。 環境 Chrome curl grep egrep やり方 1. Chromeでおもむろにデベロッパーツールを開く Macなら Shift + Cmd + c等で開けます。 2. networkを選択する そのページのリクエストを見つける たぶん、一番上のはず。 3. 右クリックして、Copy as cURLを選択 今回の肝はこれで、ブラウザで送った

    【裏技】みんな知らないログイン必須ページの爆速スクレイピング【モテるシェル芸】 - ps aux | grep serinuntius
    serinuntius
    serinuntius 2018/07/19
    めっちゃふざけたタイトルとOGPだけど、記事の内容は超便利なので読んで!!!
  • dockerのコンテナを楽に選択するpecoを使ったalias - ps aux | grep serinuntius

    ブログ書くの怠ってたから、カジュアルにアウトプットしていくぞ!!! 題 環境 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 これぐらいしか思いつかないけど、まあ便利

    dockerのコンテナを楽に選択するpecoを使ったalias - ps aux | grep serinuntius
    serinuntius
    serinuntius 2018/07/16
    最近dockerの作業が多いので書いた!!!
  • go run main.goとすると別ファイルのmainパッケージのグローバル関数がundefinedで怒られる - ps aux | grep serinuntius

    めっちゃ久しぶりのブログになってしまった。 書くことなんか何個でもあるのに、バタバタしてたりでアウトプットを疎かにしていた。(言い訳) 題 少し前から気になってたことだったんだけど、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したいときの

    go run main.goとすると別ファイルのmainパッケージのグローバル関数がundefinedで怒られる - ps aux | grep serinuntius
    serinuntius
    serinuntius 2018/07/15
    今日ちょっとハマったやつ、書いた。
  • kamakura.go #4 に登壇しました! - ps aux | grep serinuntius

    昨日(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 ログな

    kamakura.go #4 に登壇しました! - ps aux | grep serinuntius
    serinuntius
    serinuntius 2018/05/26
    発表資料をアップしました!
  • 【追記アリ】Golangで1行1行がJSONのログを効率的にパースする - ps aux | grep serinuntius

    この記事でも書いたけど、ISUCON用のロガーを作ったので、そのログをパースするツールを書こうと思った。 serinuntius.hatenablog.jp 少しパフォーマンスを意識して書いてみたけど、きっともっとパフォーマンスが良くなる気がするのでマサカリウェルカムです。 パースするログ ベンチマークの見方 試行錯誤の歴史 毎行Unmarshal jsonのarrayを[]byteで作って、1回だけUnmarshal あらかじめファイルサイズ分のbyteを用意する bytes.Buffer使ってみる jsoniter使ってみる makeで行数分のRequestを作る 結論 まとめ おまけ 追記 お急ぎの方は 結論 にどうぞ。 パースするログ 今回パースするログはこんな感じのログでこれが何千行とあるのを想像していただければ。 {"level":"info","ts":1525134349.

    【追記アリ】Golangで1行1行がJSONのログを効率的にパースする - ps aux | grep serinuntius
    serinuntius
    serinuntius 2018/05/15
    社内でマサカリいただいたので、追記した。
  • git blameとpecoとhubで特定行のGitHubのPRを一発で開くのを実現するgit alias - ps aux | grep serinuntius

    via GIPHY tl;dr 大規模なプロジェクトでコード書いてると、「なんでこういう設計になってるのか」とか「当時はどういう仕様だったのか」みたいなのを知りたいことがよくある。 そういったときに、プルリクエストを見ることで知りたい情報を手に入れられることがある。 この行のプルリクエストをみたいな〜と思ったときに、参考にあるCommit Hashから調べる方法で解決していたのだけど、Commit Hashを調べてコピーして git openpr <commit hash> ってやるのが手間だな〜と思ったので一発でこれができるコマンド(blamepr)を作った。 依存ツール 両方brewで入る hub peco 設定 ~/.gitconfigに↓を追記する。 別にblamepr という名前じゃなくてもいい。自分で好きな名前にしてください。 [alias] openpr = "!f() {

    git blameとpecoとhubで特定行のGitHubのPRを一発で開くのを実現するgit alias - ps aux | grep serinuntius
    serinuntius
    serinuntius 2018/04/22
    書いた。大規模プロジェクトだとプルリクエストをよく辿るので便利。
  • 1