ぬん さん プロフィール

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

ぬん さんのブログ記事

  • Redisのmaxclientsを変更する時はmax open filesも変更する
  • 実行環境:CentOS 6.7、Redis 3.0Redisのconnected_clientsがデフォルトの上限10000に達していたので、maxclientsを上げようとしたが、エラーが出てしまった。$ redis-cli info | grep connected_clientsconnected_clients:10000$ redis-cli127.0.0.1:6379> CONFIG GET maxclients1) "maxclients"2) "10000"127.0.0.1:6379> CONFIG SET maxclients 60000(error) ERR The operating system is not able to handle the specified num [続きを読む]
  • プロセスの環境変数を確認する方法まとめ
  • プロセスの環境変数を確認する方法が複数あるのでまとめる。strings確認したいプロセスのプロセスIDがわかっているときは、バイナリファイルやデータファイルでも表示可能な文字列を表示できるstringsを使うのが一番簡潔。環境変数は/proc/[PID]/environに記載されているが、各環境変数はnull文字(0)で区切られているため、単純にcatするだけでは一行で出力されてしまい見づらい。$ sudo cat /proc/4186/environTERM=xtermTMPDIR [続きを読む]
  • Rubyでシェル変数を使う
  • Rubyでシェル変数を使う方法には、Rubyプログラムの引数として渡すか、シェル変数を環境変数にするかの2通りがある。引数として渡す場合、RubyではARGVを使って値を取得する。$ param1="p1"$ param2="p2"$ ruby -e 'puts ARGV[0], ARGV[1]' $param1 $param2p1p2環境変数にする場合、RubyではENV[‘変数名’]で値を取得する。# 対象プロセス実行中のみ環境変数が有効になるようにする場合$ param1="p1" param2="p2" ruby -e 'puts E [続きを読む]
  • fpingで最速で全サーバの疎通を確認する方法
  • fpingは並列で複数ホストにPingチェックを行ってくれるため、チェックしたいサーバ全台をループで回してpingを送るよりも高速に実行できる。ただfpingのオプションを適切にすることでさらに高速に実行できるし、fpingと組み合わせるコマンドの工夫でさらに高速に実行できる。オプション無しまずはオプションを指定せずに一番遅い方法を見てみる。$ time cat all_list | xargs fping -a > alive_listreal 0m10.328suser 0m0.0 [続きを読む]
  • 終了ステータスを$?とif文で比較してはいけない
  • プロセスの終了ステータスを$?で取得し、if文で判断するshellスクリプトは書いてはいけない。if文を使うということは、条件文としてtestコマンドを使うことになり、ifとelif(の中のtestコマンド)が実行されるたびに、終了ステータス$?が変わってしまう。以下にサンプルコードを書く。$ cat test.sh#!/bin/shreturn_val() { echo '"$?" is 2' return 2}return_valif [ $? = 3 ]; then echo '"[ $? = 3 ]" is matched. $? is' $ [続きを読む]
  • expectの中でawkを使う方法
  • 以下のコマンドはサーバ($host)をLBから外して、jettyを再起動したあと、再度LBに組み込むものである。変数$hostをfor loopに組み込んで全サーバのjetty再起動を以下のコマンドで自動実行したかった。# サーバパスワードを入力read -sp 'password:' pw# LBからサーバを1台外すコマンド# コマンドは略# expectでサーバにパスワードを入力せずログインする。# 踏み台サーバ(jump_host)にログインしたあと、sudo ssh $hostを実行 [続きを読む]
  • SSHでコマンド実行した時にコマンド終了後も制御が戻らない時の対処方法
  • SSHでコマンド実行した時にリモート先でコマンド終了後も制御が戻らないことがあった。現象を確認した後に対処方法を二つあげてみる。SSHの制御が戻らない現象今回SSHの制御が戻らなかった時のコマンドはservice jetty start。jettyを起動したかった。SSHでリモートにログインした後で直接実行すると、問題なくコマンドは終了する。# remote=10.100.68.239# ssh $remote# service jetty startStarting Jetty: StartLog to /disk1/j [続きを読む]
  • Rubyやsedで複数行の文章を任意の箇所に挿入する
  • お題複数行の文章を任意の箇所に挿入するワンライナーを書くファイル中の任意の箇所、例えば複数行にわたる正規表現にマッチした箇所の下に、複数行の文章を挿入するとき、Rubyのワンライナーでどのように書くかを考えてみる。またsedでの対処法も考えてみる。今回編集するファイル名はtest.shとする。test.shにはあるif文が書かれた箇所があり、そのif文の下にもう一つif文を入れたいとする。test.sh#!/bin/bash(略) if [ $cond [続きを読む]
  • 『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()コールが完了しているも [続きを読む]