ぬん さん プロフィール

  •  
ぬんさん:  システム開発メモ
ハンドル名ぬん さん
ブログタイトル システム開発メモ
ブログURLhttp://progmemo.wp.xdomain.jp/
サイト紹介文Java RDB Linuxを主に使うシステム開発についての備忘録
参加カテゴリー
更新頻度(1年)情報提供62回 / 365日(平均1.2回/週) - 参加 2015/08/21 21:29

ぬん さんのブログ記事

  • 『RDB技術者のためのNoSQLガイド』読書ノート
  • 『RDB技術者のためのNoSQLガイド』を読んだので、学んだ点をまとめる。RDB技術者のためのNoSQLガイド第2章 イントロダクションNoSQLにすると嬉しいこと・辛いこと外部サービスのデータ格納などにおいて、NoSQLにすると、スキーマが変わってもとりあえず溜めておける。スキーマが変わってデータを取得できないというリスクを回避できる。よくあるNoSQLの勘違い音声、画像などのマルチメディアデータは一つのデータ容量が大きいため [続きを読む]
  • dfとduの結果が異なるときに疑ったこと
  • df -hを実行してディスク容量がいっぱいになったことを確認し、duを使ってディスク容量を無駄に使っているファイルを探そうとしたが、大きなディスク容量を使用しているファイルがなかった。ルートディレクトリの容量をdu -shx /で確認した結果とdf -hの結果が大きく異なっていた。※du -shxの-x, --one-file-systemは、duの引数としてルートディレクトリを指定しているために「違うファイルシステムの物も大量に集計に入ってしま [続きを読む]
  • Rubyで歯抜けの連番からなる配列を作る
  • 歯抜けの連番からなる配列をRubyのワンライナーで作ってみる。歯抜けの連番(例えば1..5,16..20,31..35)配列を作る方法としてまず考えられるのは、Rangeを使って歯抜けではない部分を生成し、各Rangeを要素に持つ配列を作り、この配列を数値の配列に均す方法。まず各Rangeを要素に持つ配列を作る。[(1..5),(16..20),(31..35)]Rangeの配列を各数値の配列に均すため、RangeをArrayにしてから、reduceとArray#concatを使う。$ ruby - [続きを読む]
  • Rubyのeach_sliceで配列等を一定数で分割して表示する
  • 配列等を一定数で分割したい時、shellで書くよりもRubyのeach_sliceで書く方がワンライナーでスッキリ書ける。例えば1から98までを5個区切りで表示したいとする。まず、Rangeオブジェクトで1から98までを作成し、each_sliceを繋げて、5個ずつに分割する。$ ruby -e '(1..98).each_slice(5){|arr| puts arr.join(" ")}'1 2 3 4 56 7 8 9 10(略)91 92 93 94 9596 97 98割り切れない数でeach_sliceしても良いように分割してくれる。例 [続きを読む]
  • USキーボードをWindowsで正しく使用できるようになる常駐型アプリ
  • WindowsでUSキーボードを使用しようとすると、レジストリをいじったり、ドライバを切り替えないといけない。レジストリをいじるのがためらわれる場合、ULE4JISというアプリを使うと、アプリを起動するだけでUSキーボードが正しく使えるようになる。スタートアップに追加してPC起動時に自動で立ち上がるようにしておくと、USキーボードを不自由なく使える。ULE4JISの良いところはアプリ起動で済む簡単さよりも、Caps lockでIMEのON [続きを読む]
  • sedの代わりにRubyで複数行への正規表現マッチング
  • 行単位に処理するのであれば、sedで簡潔に正規表現を使用してマッチングができる。しかし、複数行にわたって正規表現のマッチングをするのであれば、Rubyを使った方がいい。複数行であっても、正規表現内に行数指定がないのであれば、Rubyでなくてもいいのだが。まずは複数行であっても正規表現内に行数の指定がなく、Rubyである必要がないものをsedを使って書いて、それをRubyに書き直してみる。題材として、Tomcatのserver.xmlか [続きを読む]
  • /etc/hostsとhttpd.conf、ssl.confからドメインとIPの対応を一覧化する
  • 全サーバの/etc/hostsとhttpd.conf、ssl.confからドメインとIPの対応を一覧化するスクリプトを、egrep, xargs, sedのような一般的なコマンドを使って作成してみる。/etc/hostsは以下のようになっているとする。xxx.xxx.xxx.xx1 host1xxx.xxx.xxx.xx2 host2xxx.xxx.xxx.xx3 host3スクリプトは次のように、for loopとsshで各サーバにegrep, xargs, sedなどのコマンドを発行している。現在いるサーバで定義した変数を展開できる [続きを読む]
  • シェルスクリプトでSQLのJOIN結合やGROUP BYを実現する
  • シェルスクリプトでSQLのJOINを実現する方法について、王道のjoinコマンドと、awkを使った方法をそれぞれ考えてみる。またSQLのGROUP BYもawkで実現してみる。目次前提joinコマンドでJOINawkでJOINJOINと計算式awkでGROUP BY前提今回使用するデータとして、以下の商品マスタと注文トランザクションを用意する。# products(pid, pname, price)表$ cat productsp1 pencil 100p2 pen 200p3 eraser 150# orders(oid, pid(FK(products.p [続きを読む]
  • iostat -xで表示されるrrqm/s、wrqm/sとr/s、w/sの違い
  • iostat -xで出力される項目のうち、rrqm/s、wrqm/sとr/s、w/sは、一秒間のI/Oリクエスト数を表示している。システムへの負荷を確認するという目的でどちらの項目を重視すべきかは、それぞれの表示の違いを把握する必要がある。r/s、w/sは一秒間に発行したリード/ライト・リクエストの数rrqm/s、wrqm/sは一秒間にマージされたリード/ライト・リクエストの数LinuxはI/O性能を高めるため複数のI/OオペレーションをまとめてI/O装置に発 [続きを読む]
  • ディスクI/O操作方法の種類--Async/Sync/AIO
  • ディスクI/Oの操作方法はAsync/Sync/AIOの3種類ある。Asyncmount optionはasyncがデフォルト。ページキャッシュが使われているため、write()コールが完了してもすぐにはdiskに書き出されない。ページキャッシュからの書き出し失敗をアプリケーションは検知できない。Syncwrite()コールはページキャッシュが書き出すまで完了しない。スレッド停止期間が長くなる。エラーでプロセスが落ちた場合でも、write()コールが完了しているも [続きを読む]
  • robocopyでフォルダのタイムスタンプを維持する
  • robocopyコマンドはディレクトリ、ファイルの同期やコピーをしてくれる。ディレクトリ配下を同期したい場合、良く紹介されているオプションは/MIRであり、srcにないファイルの削除も含めて完全同期してくれる。robocopy C:src_folder D:dest_folder /mir/MIRはその名の通りディレクトリツリーをミラー化してくれる。/E /PURGEを指定したことと同じで、「空のディレクトリを含むサブディレクトリをコピー」し、「既にコピー元に存在 [続きを読む]
  • 『UNIXシェルスクリプト マスターピース132』読書ノート
  • 『UNIXシェルスクリプト マスターピース132』を読んだので、学んだ点をまとめる。UNIXシェルスクリプト マスターピース132パラメータ展開${param%word}で変数paramからwordに後方最短一致でマッチする部分を削除した値${param%%word}で変数paramからwordに後方最長一致でマッチする部分を削除した値${param#word}で変数paramからwordに前方最短一致でマッチする部分を削除した値${param##word}で変数paramからwordに前方最長一致で [続きを読む]
  • tasksetやnumactlを使ってプロセスが動くCPUコアを指定する
  • Redisのようにシングルコアで動かすものをtasksetコマンドでCPUのコアを固定することでパフォーマンスが向上する場合がある。CPUが2コアあるとして、1コア目がネットワーク通信に使用されているとき、Redisまで1コア目で動くと、通信とRedisプロセスがCPUを奪い合うことになるので、Redisを2コア目で動くようにする。HAProxy Enterprise Editionのドキュメントにも同様の記載がある。For high performance purpose, it is required [続きを読む]
  • swapを使っているプロセスの特定
  • swapを使っているプロセスの特定方法。$ grep VmSwap /proc/*/status | sort -k 2 -rn | head -1/proc/3707/status:VmSwap
    : 770188 kB$ grep VmSwap /proc/*/status | sort -k 2 -rn | head -1 | cut -d'/' -f3 | xargs -I% ps --pid % -fUID
    PID PPID C STIME TTY TIME CMDme 3707 699 0 Dec08 pts/8 00:00:29 sample_commandポイントはVmSwapの
    行の2列目を抜き出して、多い順に数値として並 [続きを読む]
  • 『WEB+DB PRESS Vol.95』読書ノート
  • 『WEB+DB PRESS Vol.95』を読んだので、学んだ点をまとめる。WEB+DB PRESS Vol.95特集3 試して学ぶHTTPヘッダキャッシュCache-Controlヘッダキャッシュの可否とキャッシュの利用期限(いつまで保持するか)を指定できる。ExpiresヘッダCache-Controlヘッダと併用する。キャッシュの利用期限を指定するのがCache-Controlなのに対して、キャッシュのコンテンツの有効期限がいつまでかを指定する。すなわち、Cache-Controlでの指定方 [続きを読む]
  • 『WEB+DB PRESS Vol.94』読書ノート
  • 『WEB+DB PRESS Vol.94』を読んだので、学んだ点をまとめる。WEB+DB PRESS Vol.94特集1 スケーラブルAWS第1章 スケーリングの基本戦略インスタンスサイズの決定1台がサービスアウトしても全体の処理に問題ないリソースを確保する。CPU使用率が50%を越えて100%に近づいていくと、CPU使用率と処理能力が比例しなくなっていくので、2台構成であればピーク時のCPU使用率は30~40%が限度。3台以上の構成であれば50%程度を限度とする。第2 [続きを読む]
  • ネットワーク負荷をCPUの各コアに分散させるRPS,RFS設定スクリプト
  • 高負荷なネットワークアプリケーションにおいて、他のコアが空いているにも関わらず、CPU0 の softirq(%soft) に負荷が集中することがよくある。Linuxでロードバランサやキャッシュサーバをマルチコアスケールさせるためのカーネルチューニングでその詳細について詳しく解説されているが、対応策として、RPS (Receive Packet Steering)とRFS (Receive Flow Steering)の設定を行うことで、負荷をCPUの各コアに分散させることができ [続きを読む]
  • sedやgrepで、ある行のn行前から処理対象にする
  • ファイル内のある条件を満たすある行をsedで処理したいときは、正規表現等を使用すればよい。しかしその行のn行前から処理する方法は少し工夫が必要となる。次のファイル(sample.txt)があるとする。Line 1.Line 2.Line 3. testLine 4.Line 5.testを含む行から1行を表示したければ、-nオプションと現在のパターンスペースを出力するpコマンドを使用して、次のようにすればよい。$ sed -ne '/test/,+1p' sample.txtLine 3. testLine [続きを読む]
  • 連続したスペースをシェルで扱うときはprintfを使う
  • ある個数分の連続したスペースを使用したければスペースをループで結合して使用するなどは行わない方がいい。printfを使用する方が簡潔に書ける。$ count=30$ sp=''$ for i in `seq 1 $count`> do> sp="$sp "> done$ echo "f${sp}t"f t上のコードは1行で書ける。$ sp=`printf "%${count}s"`$ echo "f${sp}t"f t 余談1.ちなみにスペースを含む変数は、ダブルクォーテ [続きを読む]