気軽に楽しくプログラムと遊ぶ

自分が興味があってためになるかもって思う情報を提供しています。

Jenkins Pipelineとは

Jenkins pipelineを使ったデプロイジョブが動作不良になった経緯があり、基本概念を調べてまとめておきます。

Pipelineとは

Jenkins2.0においてPipeline Pluginが標準装備になりました。

Pipelineは、デプロイのパイプライン(ステージ毎の工程)を可視化するツールで、Groovyスクリプトで記述できます。

f:id:tamata78:20210604145521p:plain

公式ドキュメント

https://jenkins.io/doc/pipeline/

Groovyスクリプト内の概念

node → stage → step

node('master') {
  stage('手順1') {
    sh 'step1'
    sh 'step2'
    sh 'step3'
  }
}

nodeが実行マシンのイメージ。
ステージ毎に各ステップを実行していくという形で記述する。

MySQL 実行計画(EXPLAIN)

MySQLにおける実行計画の見方について記載します。

EXPLAIN 結果確認

クエリコストをみたい場合

format=jsonをつけてexplainを実行する。

explain format=json 【クエリ】

結果Json

query_costの箇所にコストが表示される

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "3599.86"
    },
    "nested_loop": [
      {
        "table": {
          "table_name": "s",
          "access_type": "ALL",
          "possible_keys": [
            "PRIMARY"
          ],
          "rows_examined_per_scan": 11309,
          "rows_produced_per_join": 113,
          "filtered": "1.00",
          "cost_info": {
            "read_cost": "2400.18",
            "eval_cost": "22.62",
            "prefix_cost": "2422.80",
            "data_read_per_join": "100K"
          },
          "used_columns": [
            "shop_id",
            "shop_nm",
            "menu_cd"
          ],
          ・
          ・
          ・

通常EXPLAINを実行した場合

以下のような形式で結果が表示

f:id:tamata78:20210521172119p:plain

結果項目

各項目の詳細は以下です。

項目名 結果候補 説明
id - 実行順番。同数字の場合、複数クエリが1クエリで実行
select_type PRIMARY 外部クエリ
DEPENDENT SUBQUERY 相関関係のあるサブクエリ
table - 対象テーブル名
partition - どのパーティションテーブルか
type const pk or uniqueインデックスを使用。最も速い
eq_ref -joinにおいてのconstと同義
ref constでないインデックスを使って等価検索(where k = v)を行った時に使用されるアクセス
range indexを用いた範囲検索
index フルインデックススキャン、インデックス全体をスキャンしているので遅い
ALL フルテーブルスキャン、インデックス未使用。一番遅い
possible_keys - optimizerがテーブルのアクセスに利用可能だと判断したインデックス
key - 実際にoptimizerによって使用されたキー
key_len - 選択されたキーの長さ。長さは短いほうが高速
ref - 検索条件でkeyと比較されている値やカラムの種類
const 定数値
結合相手の検索条件カラム JOIN時
rows - テーブルのfetch行数、見積もり
filtered - テーブル条件によってフィルタ処理される行の推定の割合
Extra - optimizerの戦略。項目多いので省略

JMeterの出力結果の見方

JMeterの出力結果の簡単な読み方について記載します。

Jmeterの出力結果の見方

$ apache-jmeter-5.3/bin/jmeter.sh  -n -t test.jmx
summary +   2297 in 00:00:24 =   95.4/s Avg:  1176 Min:     1 Max: 16483 Err:    15 (0.65%) Active: 113 Started: 120 Finished: 7
summary +   1303 in 00:00:06 =  210.9/s Avg:   429 Min:    22 Max:  5709 Err:     0 (0.00%) Active: 0 Started: 120 Finished: 120
summary =   3600 in 00:00:30 =  119.0/s Avg:   906 Min:     1 Max: 16483 Err:    15 (0.42%)
  • summary:リクエスト数 in 経過時間 = 秒間リクエスト数(リクエスト数/経過時間(s))
  • Avg:各リクエストの応答までの時間の平均
  • Err:エラー数と割合
  • Active:実行中リクエス
  • Started:開始リクエス
  • Finished:終了リクエス

上記では、1行目で120リクエストが開始されたが、7リクエストしか終わっていない。 エラーも発生しているため、分間(または秒間)にさばけるリクエスト数を減らす必要がある。

負荷テスト時のポイント

  • テスト実行は、3回やって外れ値少ないものを記録
  • さばける件数が少ない場合、秒間計測はスキップ

ssh時はローカルのlocaleを接続先に引き継いでしまう

タイトルの通りだけど、ssh時はローカルで設定したlocaleを引き継いでしまい、 接続先はen_USだったはずなのに、ja_JPになるということがある。

ssh -v でデバッグすると、接続先にロケール情報を引き継いでいることを確認できる。

[接続元]$ ssh -vi ***.pem ec2-user@***.***.***.***
OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011
debug1: Reading configuration data /etc/ssh_config
debug1: /etc/ssh_config line 20: Applying options for *
debug1: Connecting to ***.***.***.*** [***.***.***.***] port 22.
debug1: Connection established.
debug1: identity file test-cm.pem type -1
debug1: identity file test-cm.pem-cert type -1
・
・
・
debug1: Sending environment.
debug1: Sending env LANG = ja_JP.UTF-8

SSH接続時のLANG設定がOS設定値と異なる時の対処方法 | DevelopersIO

解決方法

/etc/ssh_configのEnvをssh時に送信する設定をコメントアウトするとlocale設定を引き継がなくなる。

 Host *
 #   SendEnv LANG LC_*

Bitbucket ソース共有時のオプション

以下のパラメータを付与するとブランチや色付け行数を指定可能

【URL】?at=master#lines-190:191

ブランチ:at=【ブランチ名】
行数色付け:#lines-【開始行数】:【終了行数】

IntelliJ IDEA ショートカット(MacOSX)

便利なショートカットを記載しておきます。

カテゴリ コマンド 概要 詳細
ナビゲーション command + option + 左右キー ナビゲーションのUndo/Redo
検索 Shift + Shift 全て検索 プロジェクト内のファイル名、クラス名、シンボル名(変数、メソッド等)をインクリメンタル検索。クラス検索(Ctrl + N)で詳細検索
Ctrl + Option + H 呼び出し階層を開く
Ctrl + F12 メソッド一覧を開く
Command + E 最近開いたファイルを開く 開いた後にCommand + Eを押すと修正したファイルのみを開く
編集 Shift + F6(fn押しで) 名前変更
Ctrl + J ライブテンプレート 省略コマンドでテンプレート呼び出しで実装効率化
メソッド名の上で、/ **と入力してEnter メソッドJavaDocコメント生成 ショートカットはない
Option + Shift + ↑ or ↓ 行の移動
Command + Option + L コードフォーマット
設定 Ctrl + , 設定を開く
テスト パッケージを選択してCmd+N テストクラスを作成
クラス内でCtrl+Enter テストメソッドを作成
エラー箇所でCtrl+Enter コンパイルエラーを解消する
テストメソッド内でCtrl+Shift+R 特定のテストを実行する
テストクラス内でCmd+Shift+T テスト ←→ 実装コード
メソッドにカーソルをあわせてCtrl+Cmd+B テストコードで呼び出しているメソッドへ移動
(どこでも)Ctrl+R 最後に実行したテストの再実行

参考URL