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を設定してアクセスしたときに少しだけはまったのでメモ
- まずJmeterのGUIを開いて「ワークベンチのコンテキストメニュー(右クリック) -> 追加 -> Httpプロキシサーバ」で必要な項目を入力する
(Global SettingとかHTTP Sampler settingsとか) - 「↑で作ったプロキシサーバのコンテキストメニュー -> 追加 -> 設定エレメント -> HTTPリクエスト初期値設定」で必要な項目を入力する
- 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だともっと長いの使えるらしいとの噂
▼ macのmysqlでクエリーログを取得しようとした時に発生した話
調べたら
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 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らしい