記憶永続化用のメモブログ

脳内に揮発性記憶領域しかないことに気づいたので作成

node.jsを始めたメモ

node.jsのインストール
http://nodejs.org/からインストールするだけ。省略

IDE(cloud9)のインストール
・適当な場所でcloud9のコードをgithubからclone!

git clone git://github.com/ajaxorg/cloud9.git
cd cloud9
npm install
./bin/cloud9.sh -w ${ワークスペースのパス}

cloud9が起動したらブラウザでhttp://localhost:3131にアクセス!
mercurialがないと起動した時にエラーが出るので、必要であればhttp://mercurial.selenic.com/downloads/からダウンロードしてインストール。省略

tomcatで java.lang.OutOfMemoryError: unable to create new native thread

負荷試験中に以下のエラーが出て、少しはまったのでメモ

java.lang.OutOfMemoryError: unable to create new native thread

普通にOOMなんだけど、このパターンで出力される時って
ユーザ空間不足や仮想メモリ不足が原因らしい。

んでもってOOMだからtomcatユーザのswap領域不足やulimit -aのmax memory sizeを疑ってみたけど、
両方とも十分過ぎるくらいに確保されている。

で、なんでかなーって思ってたらulimitのmax user processesが少なかったのが原因だった。
${tomcatのパス}/bin/setenv.shにlimit -u ${スレッド数}を書いてあげたら解決した。

Jmeterで自動でテストケースを作成する

JavaからHttpClient4.3でJmeterのProxyを設定してアクセスしたときに少しだけはまったのでメモ

  1. まずJmeterGUIを開いて「ワークベンチのコンテキストメニュー(右クリック) -> 追加 -> Httpプロキシサーバ」で必要な項目を入力する 
    (Global SettingとかHTTP Sampler settingsとか)
  2. 「↑で作ったプロキシサーバのコンテキストメニュー -> 追加 -> 設定エレメント -> HTTPリクエスト初期値設定」で必要な項目を入力する
  3. Httpプロキシサーバの「開始」を押す

そうするとjmeterのインストールディレクトリの中のbinにcrtファイル※1が作成される。(ポップアップで通知される)
とりあえず無視して下のような感じでJAvaのHttpClient4.3でProxyにJmeterのHttpProxyを指定して実行してみた。(プロキシサーバのポートには8081を設定)

そうすると以下のようなエラーが出た

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1886)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:276)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:270)
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1341)
at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:153)
at sun.security.ssl.Handshaker.processLoop(Handshaker.java:868)
at sun.security.ssl.Handshaker.process_record(Handshaker.java:804)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1016)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323)
at org.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:280)
at org.apache.http.impl.conn.HttpClientConnectionOperator.upgrade(HttpClientConnectionOperator.java:167)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.upgrade(PoolingHttpClientConnectionManager.java:329)
at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:392)
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:218)
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:194)
at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:85)
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:108)
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:186)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:106)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:57)
at HttpClientHttpsProxyTest.init(HttpClientHttpsProxyTest.java:xxx)
at HttpClientHttpsProxyTest.main(HttpClientHttpsProxyTest.java:xxx)
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:385)
at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:292)
at sun.security.validator.Validator.validate(Validator.java:260)
at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:326)
at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:231)
at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:126)
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1323)
... 21 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:196)
at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:268)
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:380)
... 27 more

調べてみると
http://www.melange.co.jp/blog/?p=2345
の記事にたどり着いて(助かりました!)、この記事の通りに※1のcrtファイルをimportcertしてみる

# MacOSで実行時
keytool -importcert -v -trustcacerts -file /Applications/apache-jmeter-2.11/bin/ApacheJMeterTemporaryRootCA.crt -keystore /Library/Java/JavaVirtualMachines/jdk1.7.0_25.jdk/Contents/Home/jre/lib/security/jssecacerts

んで再びアクセスしたらうまくいった

mysqlについてメモ

個人的なメモだってば

▼ UNIQUE KEYを貼ろうとした時に怒った話
ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes
っておこられる。
InnoDBのカラムインデックスに使えるカラムの限界は767 bytesなんだって
MySQL :: MySQL 5.1 リファレンスマニュアル :: 6.4.3 カラムインデックス

UTF-8環境で
varchar(256) をキーに使おうとすると 256 * 3byte = 768byte でアウト
varchar(255) をキーに使おうとすると 255 * 3byte = 765byte でセーフ

ふーん・・・

myISAMだともっと長いの使えるらしいとの噂

macmysqlでクエリーログを取得しようとした時に発生した話
調べたら
mysql.confに
log=ファイルパス
で起動時に--logつけりゃーいけるよって話じゃなかった
mysql.confに
general_log = ON
general_log_file=ファイルパス
って書いて
起動スクリプトで --general-logつけろって話だった

innoDBでバッファキャッシュヒット率が気になったときの話

mysql> show global status like 'Innodb_buffer_pool_%';

Variable_name Value
Innodb_buffer_pool_dump_status not started
Innodb_buffer_pool_load_status not started
Innodb_buffer_pool_pages_data 462
Innodb_buffer_pool_bytes_data 7569408
Innodb_buffer_pool_pages_dirty 227
Innodb_buffer_pool_bytes_dirty 3719168
Innodb_buffer_pool_pages_flushed 1358
Innodb_buffer_pool_pages_free 130606
Innodb_buffer_pool_pages_misc 4
Innodb_buffer_pool_pages_total 131072
Innodb_buffer_pool_read_ahead_rnd 0
Innodb_buffer_pool_read_ahead 0
Innodb_buffer_pool_read_ahead_evicted 0
Innodb_buffer_pool_read_requests 9107914
Innodb_buffer_pool_reads 223
Innodb_buffer_pool_wait_free 0
Innodb_buffer_pool_write_requests 36469

17 rows in set (0.00 sec)

Innodb_buffer_pool_read_requests =
InnoDB が行った論理読み込みの数(累計)
Innodb_buffer_pool_reads =
InnoDBがバッファ プールの内容を利用できず、シングル ページ読み込みを行わなければならなかった論理読み込みの回数(累計)

なので
( 1 - Innodb_buffer_pool_reads/Innodb_buffer_pool_read_requests ) * 100
で算出できるんですって
MySQL :: MySQL 5.1 リファレンスマニュアル :: 4.2.5 ステータス変数

git備忘録(自分用)

よく使うのでよく忘れるのをメモするスペース

commitを纏める git rebase -i


git rebase -i HEAD~~

pick xxxxxxx ほげ
pick xxxxxxy ふが

pick xxxxxxx ほげ
squash xxxxxxy ふが

これでHEADからHEAD~~までのコミットが纏められる

特定のバージョンのファイルの状態を確認する

git show ${version}:${path}

git show HEAD^^:src/resources/hoge.xml

これでsrc/resources/hoge.xmlの2つ前のバージョンの状態が確認出来る

特定のバージョンのファイルの状態に戻す

git checkout ${version} ${path}

git checkout HEAD^^ src/resources/hoge.xml

これでsrc/resources/hoge.xmlの2つ前のバージョンの状態に戻る

特定のバージョンに戻したい、というかやりなおしたい

git log

git reset --soft ${戻したいコミットID} (ファイルも戻したかったら--hard)

git push -f ${server} ${戻したいコミットID}:${branch} (pushしちゃってる場合)


で修正してcommitからやりなおす

vim備忘録(自分用メモ)

もう何年もvimであれこれやろうとするたびに、毎回操作コマンドを忘れてネットを徘徊するのめんどくさくなってきたのでメモしておく。

矩形モード Ctrl + v
選択した部分を削除 d
選択した箇所の前に文字を挿入 I (Shift + i)
選択した箇所の後に文字を挿入 A (Shift + a)
選択した箇所を置き換え c
選択した文字を小文字に変換する u
選択した文字を大文字に変換する U (Shift + u)

ファイル内の文字全部を置き換え
:%s/置き換え元/置き換え文字/g

1行だけ置き換え
:s/置き換え元/置き換え文字/g

改行へ置き換える
:%s/置き換え文字/^M※/g
※ ^M はCtrl + v を押して Cntl + mらしい

Mac eclipse4.3でコンソールが文字化け

ググる
/Applications/eclipse/Eclipse.app/Contents/MacOS/eclipse.ini

を追記して再起動すれば大丈夫って書いてあったんだけど、
なんか自分の環境じゃ普通に再起動じゃダメで、
eclipseをclean起動したらなおった。

/Applications/eclipse/Eclipse.app/Contents/MacOS/eclipse -clean