数年使ってきた持ち歩き用ノートパソコンの調子が悪く、いっそOSを入れ替えてしまえ!、ついでにHDDをSSDにしてしまえ!の記録。
マシンはLenovo X200sで、Core2Duo, 4GB-RAM, Windows XP。最近遅いのが気になり出していました。それは他のマシンがすべてCore-i*, Windows7(x64)で、それと比較してしまうからなんじゃないかとも思いましたが、やはりXP自体が度重なる更新や諸々のアップデートで重くなっているんじゃないかとか、もう32bitでは限界なのではないかとか。そもそもXPとは既に10年前のソフトウェアですから、今のマシンに合わないのは自明かもしれず、買い換えようと思って新しいマシンを物色したのですが・・・。
現在販売されているノートPC、画面の主流は12ワイド型でも中途半端なWXGA=1366x768。縦768って、これは仕事にならないでしょう。なぜか最近のモバイルパソコンはこのサイズのものばかりで、どのメーカーもそろってこのサイズ。辛うじてASUSのZenBookが13型ながら1600x900。ところが、上述のX200sはWXGA+=1440x900。縦768と900の違いは15%だけれど、驚くほど生産性が違う。2倍ほど違うんじゃないか。
よって、新しいマシンに乗り換えることはあきらめ、せっかくのこの高解像度ディスプレイを活かすべく、OS入れ替えで対応してみようと思い立ちました。Windows7のx64にしてメモリを4GBから8GBに増やせば少しは改善されるんじゃないか、さらには、HDDもSSDに切り替えれば?
結果は想像通り、いや、それ以上の収穫でした。しかも、まだメモリは4GBのままなので、8GBにすればさらに改善が見込まれます。もちろん、OSとSSD、それにOfficeも64にするべく2010を新たに買い足し、メモリも追加すると新しいマシンを買うほど、いや、それ以上の出費にはなるのですが、とにかく速い。WEIの値もかなりよくて、2年ほど前のマシンなのにグラフィックを除いてすべて5.5点以上を出しています。(グラフィックはゲームやエアロをやらないので不要。)
あと、以前も同じようなことを書いた気がしますが、クラウド時代になってマシンの乗り換えが非常に楽になりました。メールは全てクラウド上ですし、ドキュメント類も主は親マシン上。また、ローカルのファイル群はすべてTrueCryptの暗号化ディスク上にあるので、コンテナファイルまるごと移設でOK。あとは必要なアプリをインストールしていくのですが、最近はほとんどがウェブ上からダウンロードでき、ライセンスもメールで送られてきていたり、オンラインで管理されていたりするので、わざわざCDからインストールしなければならないのはOfficeくらい。OSのインストールなどには多少時間がかかりましたが、ボタンを押せばあとは自動的にやってくれるので、別のことをしながらちょいちょいと触ってもう完了。あ、あと、アマゾンの激早納品も忘れてはなりません。
ということで、年末進行の最中、片手間で高速化が達成できたのは大きいです。今週のMtgに間に合いました。
(2011/12/1追記)
メモリが届いたので換装したところ、ちゃんと8GBで動作しましたことを記しておきます。Lenovoの仕様では最大4GBと書いてありますが、これはおそらくOSが32bitだったので、4GB以上刺しても認識しないからなのではないかと。チップセットは8GBまでOKとの記述がどこか(Intelのサイト?)にあったので試したところ、OKでした。WIndows7x64でちゃんと8GB認識されています。
ちなみに使用したメモリはSanMaxのDDR3 PC3-10600 204pin SODIMM 4GBx2。二枚合わせて5千円しませんでした。安くなったものです。もともとついていた(いや、いつか取り替えたかも)のがハイニクスの2GBx2で、それがPC2-8500でしたので、WEIも速くなるかなと思ったのですが、変わらなかったところを見ると、PC2-8500で十分だったかもしれません。
数式の夢とコンピュータの現実 中村仁也
数学とコンピュータで夢を追い続けてここまで来てしまった人のブログ。
2011年11月21日
perlからAmazon SimpleDBを使う際のregionの変更方法
Amazon Web Serviceを使うのが楽しい今日この頃。
その中で、Amazon SimpleDB はまだAWSコンソールにタブが無くて、取っつきにくい感があります。まずは下のScratchpadからdomain(tableのようなもの)を作成し、データを手入力したあと、perlのライブラリ Amazon::SimpleDBからアクセスを試みました。
ちなみにAmazon::SimpleDBはアマゾンのサイトからダウンロードして展開する必要があります(下のPerl Library for Amazon SimpleDB)。CPANからインストールすると古いバージョンであるとのこと。
さて、実はこれらをそのまま使うと、regionがus-east-1になってしまっています。しかし、もしTokyoのap-northeast-1のEC2インスタンスなどから使おうとすると、当然同じregionのSimpleDBを使いたい。以下、その方法。
まず、SimpleDBはregionによって異なる「サービスURL」で運用されています。SimpleDBのendpointsはこちら。http://docs.amazonwebservices.com/general/latest/gr/index.html?rande.html#sdb_region
で、デフォルトではus-east-1のendpointである「sdb.amazonaws.com」が設定されています。これを、Tokyoのendpointである「sdb.ap-northeast-1.amazonaws.com」に変更してやればOK。具体的には次。
まず、Javascript Scratchpadでap-northeast-1を使うためには、非常に原始的な方法ですが、全てのhtmlファイルから「sdb.amazonaws.com」を探して「sdb.ap-northeast-1.amazonaws.com」に置換すればよいです。grep置換などを使ってください。
次にperlのAmazon::SimpleDBの方。こちらは Amazon::SimpleDB::Clientのインスタンスをnewする際にオプションを渡せばよくて、例えば
のようにします。$serviceの中身を見て、ServiceURLが上に切り替わっていればOKです。
以下、amazon simpleDBのドキュメント等。
Perl Library for Amazon SimpleDB
http://aws.amazon.com/code/Amazon-SimpleDB/1136
Get Started with Amazon SimpleDB
http://docs.amazonwebservices.com/AmazonSimpleDB/latest/GettingStartedGuide/
FAQ / simpleDB
http://aws.amazon.com/jp/simpledb/faqs/
Javascript Scratchpad for Amazon SimpleDB
http://aws.amazon.com/code/1137
その中で、Amazon SimpleDB はまだAWSコンソールにタブが無くて、取っつきにくい感があります。まずは下のScratchpadからdomain(tableのようなもの)を作成し、データを手入力したあと、perlのライブラリ Amazon::SimpleDBからアクセスを試みました。
ちなみにAmazon::SimpleDBはアマゾンのサイトからダウンロードして展開する必要があります(下のPerl Library for Amazon SimpleDB)。CPANからインストールすると古いバージョンであるとのこと。
さて、実はこれらをそのまま使うと、regionがus-east-1になってしまっています。しかし、もしTokyoのap-northeast-1のEC2インスタンスなどから使おうとすると、当然同じregionのSimpleDBを使いたい。以下、その方法。
まず、SimpleDBはregionによって異なる「サービスURL」で運用されています。SimpleDBのendpointsはこちら。http://docs.amazonwebservices.com/general/latest/gr/index.html?rande.html#sdb_region
で、デフォルトではus-east-1のendpointである「sdb.amazonaws.com」が設定されています。これを、Tokyoのendpointである「sdb.ap-northeast-1.amazonaws.com」に変更してやればOK。具体的には次。
まず、Javascript Scratchpadでap-northeast-1を使うためには、非常に原始的な方法ですが、全てのhtmlファイルから「sdb.amazonaws.com」を探して「sdb.ap-northeast-1.amazonaws.com」に置換すればよいです。grep置換などを使ってください。
次にperlのAmazon::SimpleDBの方。こちらは Amazon::SimpleDB::Clientのインスタンスをnewする際にオプションを渡せばよくて、例えば
my $AWS_CONFIG = {
ServiceURL => "https://sdb.ap-northeast-1.amazonaws.com"
};
my $service = Amazon::SimpleDB::Client->new($AWS_ACCESS_KEY_ID,$AWS_SECRET_ACCESS_KEY, $AWS_CONFIG);
のようにします。$serviceの中身を見て、ServiceURLが上に切り替わっていればOKです。
以下、amazon simpleDBのドキュメント等。
Perl Library for Amazon SimpleDB
http://aws.amazon.com/code/Amazon-SimpleDB/1136
Get Started with Amazon SimpleDB
http://docs.amazonwebservices.com/AmazonSimpleDB/latest/GettingStartedGuide/
FAQ / simpleDB
http://aws.amazon.com/jp/simpledb/faqs/
Javascript Scratchpad for Amazon SimpleDB
http://aws.amazon.com/code/1137
2011年11月10日
新型ポメラ
新型ポメラが出たようです。http://www.kingjim.co.jp/pomera/dm100/
キーボードの形や、電子辞書搭載、表形式、二画面操作、転送方法の多様化など、これは欲しい!と思える機能だったのですが、400gは結構重いですね。うーん、これだったらUMPCを持ち歩くかなぁ。
キーボードの形や、電子辞書搭載、表形式、二画面操作、転送方法の多様化など、これは欲しい!と思える機能だったのですが、400gは結構重いですね。うーん、これだったらUMPCを持ち歩くかなぁ。
2011年10月12日
タックルにおける運動量保存の法則
久しぶりにラグビーの話題。
息子の姿に感化されて半年前から始めたラグビーですが、ずっとケガばかり。ラグビーでは打撲はケガには入らないとのことで、脚、肩、尻が内出血で青くなっているのはいつものことなのですが、骨折してしまうとさすがに通常の練習は厳しいので、そんなときはぶつからないメニューだけ参加しています。これまで半年で計4回ほど肋骨を骨折したのですが、昨日5回目をやってしまいました。いてて。
最初のうちはボールをもらってあたふたしているところにタックルされる、つまり、自分に速度が無い状態で、単純に相手の肩や腕が自分の胸にめり込んで肋骨骨折、ということが多かったと思います。その瞬間息ができなくなるので、肺が極度に圧迫されたことがわかります。タックルをもらったと言ってもその場で潰されるだけ。
ところが、最近になってやっと、速度のある状態でボールをもらって、もしくは走り始めたところにタックルが来るようになってきました。そうすると、その場で潰されるのではなく、もらった瞬間に少し飛ぶんですね。初めて飛ばされたときはその衝撃でボールを離してしまい、「自分を殺してもボールは殺すな!」と喝を入れられました。柔道などでは飛ばされた瞬間に手で受け身をとって衝撃を緩和するのですが、ラグビーでそれをするとボールを離してしまうので厳禁。未だに慣れません。
さて、そのように何度も飛ばされていると、飛ばされる方向が気になってきまして、力学的に考えてみました。自分とタックラー、それぞれ体重[kg]と速度[m/s]があり、それが衝突して、その後はくっついて飛ぶ、つまり跳ね返り係数=0とします。

まず、私の体重が60kgで、タックラーの体重も同じく60kgとし、また、角度135°(上図の角度)からそれぞれ5[m/s]の速度で衝突したとします。すると、双方速度も体重も同じならば当然、その中間の方向、それぞれ角度変化が68度の方向に飛んでいきます。(以下のグラフでは、A(青)が自分、B(赤)がタックラー、C(緑)がタックル後のだんごとします。)

このときの衝突後の速度は1.91[m/s]。また、衝突から速度ベクトルが変化しおわるまでの時間を仮に0.1秒とし、その間等加速度だったと仮定すると、その加速度の大きさは46.1[m/s2]=4.71Gです。これは両者とも同じ。
次に、タックラーの体重が60kgというのは軽すぎるので、同じ状況でタックラーの体重を80kg、自分の1.33倍としてみます。すると、

衝突後の速度は2.02[m/s]でほとんど変わりませんが、方向がかなり自分の方に曲がってきて、角度変化が自分は約90度、相手は約50度。つまり、20kg違うだけで、角度が68度から90度と、20度も変わってきてしまいます。さらにこの場合に受ける加速度は(上と同じく0.1秒で等加速度変化するとして)相手が4.04Gに対して自分は5.39Gと、自分のGが1.33倍になります。っと、この値は体重の倍率と同じですね。実は、衝突角度が何であってもこうなります。
さらに相手の体重を1.67倍の100kg(ちょうど日本代表の菊谷選手が100kgです)とすると、

自分の変化角は約100度に対してタックラーは36度と、私にはダメージ大ですが、相手には屁でもない角度になってきます。かかる加速度も5.89G(相手は3.54Gで、自分のGは相手の1.67倍)。これは厳しい。
もっと極端な場合。上では両者の速度が等しいとしましたが、例えばタックルに行く瞬間に菊谷選手がぐいっと脚をふんばって、当たる瞬間の速度を二倍の10[m/s]にまで押し上げるとどうなるか。

衝突後の速度は5.1[m/s]で自分の走っていた速度と同じ、しかし角度が120度も異なる所に飛んでいきます。受ける衝撃は8.92G。これはもう自動車事故に遭うようなものです。肋骨程度では済みそうにありません。
ということで、タックルをされるにあたり、自分が飛ばされない(自分の進行方向を極度に変化させられない)ためには、自分の体重を増やすこと、衝突する瞬間の速度を相手よりも大きくすること、つまり、自分の運動量mv[kg.m/s]を相手のそれよりも大きくしておくことが必要です。もちろん、これはガチであたった時の力学で、様々な技術によって、例えば重心を外し、運動量を角運動量に変換するようなアクションによってその衝撃を和らげ、自分の進路を大きく変更せずに進むことができるでしょう。うまくすれば相手の運動量を自身の加速に使うこともできそうです(ヨットで向かい風に向かって進むような方法?)。特に体重の軽い人はそのようなテクニックを習得しなければ前に進むことが難しい、などなど、ということがやっとわかってきました。
ちなみにこの衝突は非弾性衝突ですので、エネルギーは保存されません。例えば最後のケースでは、失われるエネルギーは3670[J]。1[J](ジュール)は1[Ws](ワット秒)で、このエネルギーが0.1秒で失われるということは、その瞬間の仕事率は36.7kW、およそ50馬力にもなります。ただ、これは瞬間的だから大きく見えるのであって、元はと言えばそれぞれの運動エネルギーから分配されるものですので、双方の体内にある糖分が分解されて生成されたカロリーに端を発しています。kcal換算すると0.88[kcal]で、ご飯換算で0.5[g]にしかなりません。これはもちろん体重が重くなると増加し、また、衝突角度が正面衝突に近くなると増えますので、例えば100kgの巨漢が10[m/s]同士で正面衝突すると、失われるエネルギーは1万[J]、ご飯換算で1.42[g]、0.1秒間の仕事率は136馬力となります。
息子の姿に感化されて半年前から始めたラグビーですが、ずっとケガばかり。ラグビーでは打撲はケガには入らないとのことで、脚、肩、尻が内出血で青くなっているのはいつものことなのですが、骨折してしまうとさすがに通常の練習は厳しいので、そんなときはぶつからないメニューだけ参加しています。これまで半年で計4回ほど肋骨を骨折したのですが、昨日5回目をやってしまいました。いてて。
最初のうちはボールをもらってあたふたしているところにタックルされる、つまり、自分に速度が無い状態で、単純に相手の肩や腕が自分の胸にめり込んで肋骨骨折、ということが多かったと思います。その瞬間息ができなくなるので、肺が極度に圧迫されたことがわかります。タックルをもらったと言ってもその場で潰されるだけ。
ところが、最近になってやっと、速度のある状態でボールをもらって、もしくは走り始めたところにタックルが来るようになってきました。そうすると、その場で潰されるのではなく、もらった瞬間に少し飛ぶんですね。初めて飛ばされたときはその衝撃でボールを離してしまい、「自分を殺してもボールは殺すな!」と喝を入れられました。柔道などでは飛ばされた瞬間に手で受け身をとって衝撃を緩和するのですが、ラグビーでそれをするとボールを離してしまうので厳禁。未だに慣れません。
さて、そのように何度も飛ばされていると、飛ばされる方向が気になってきまして、力学的に考えてみました。自分とタックラー、それぞれ体重[kg]と速度[m/s]があり、それが衝突して、その後はくっついて飛ぶ、つまり跳ね返り係数=0とします。

まず、私の体重が60kgで、タックラーの体重も同じく60kgとし、また、角度135°(上図の角度)からそれぞれ5[m/s]の速度で衝突したとします。すると、双方速度も体重も同じならば当然、その中間の方向、それぞれ角度変化が68度の方向に飛んでいきます。(以下のグラフでは、A(青)が自分、B(赤)がタックラー、C(緑)がタックル後のだんごとします。)

このときの衝突後の速度は1.91[m/s]。また、衝突から速度ベクトルが変化しおわるまでの時間を仮に0.1秒とし、その間等加速度だったと仮定すると、その加速度の大きさは46.1[m/s2]=4.71Gです。これは両者とも同じ。
次に、タックラーの体重が60kgというのは軽すぎるので、同じ状況でタックラーの体重を80kg、自分の1.33倍としてみます。すると、

衝突後の速度は2.02[m/s]でほとんど変わりませんが、方向がかなり自分の方に曲がってきて、角度変化が自分は約90度、相手は約50度。つまり、20kg違うだけで、角度が68度から90度と、20度も変わってきてしまいます。さらにこの場合に受ける加速度は(上と同じく0.1秒で等加速度変化するとして)相手が4.04Gに対して自分は5.39Gと、自分のGが1.33倍になります。っと、この値は体重の倍率と同じですね。実は、衝突角度が何であってもこうなります。
さらに相手の体重を1.67倍の100kg(ちょうど日本代表の菊谷選手が100kgです)とすると、

自分の変化角は約100度に対してタックラーは36度と、私にはダメージ大ですが、相手には屁でもない角度になってきます。かかる加速度も5.89G(相手は3.54Gで、自分のGは相手の1.67倍)。これは厳しい。
もっと極端な場合。上では両者の速度が等しいとしましたが、例えばタックルに行く瞬間に菊谷選手がぐいっと脚をふんばって、当たる瞬間の速度を二倍の10[m/s]にまで押し上げるとどうなるか。

衝突後の速度は5.1[m/s]で自分の走っていた速度と同じ、しかし角度が120度も異なる所に飛んでいきます。受ける衝撃は8.92G。これはもう自動車事故に遭うようなものです。肋骨程度では済みそうにありません。
ということで、タックルをされるにあたり、自分が飛ばされない(自分の進行方向を極度に変化させられない)ためには、自分の体重を増やすこと、衝突する瞬間の速度を相手よりも大きくすること、つまり、自分の運動量mv[kg.m/s]を相手のそれよりも大きくしておくことが必要です。もちろん、これはガチであたった時の力学で、様々な技術によって、例えば重心を外し、運動量を角運動量に変換するようなアクションによってその衝撃を和らげ、自分の進路を大きく変更せずに進むことができるでしょう。うまくすれば相手の運動量を自身の加速に使うこともできそうです(ヨットで向かい風に向かって進むような方法?)。特に体重の軽い人はそのようなテクニックを習得しなければ前に進むことが難しい、などなど、ということがやっとわかってきました。
ちなみにこの衝突は非弾性衝突ですので、エネルギーは保存されません。例えば最後のケースでは、失われるエネルギーは3670[J]。1[J](ジュール)は1[Ws](ワット秒)で、このエネルギーが0.1秒で失われるということは、その瞬間の仕事率は36.7kW、およそ50馬力にもなります。ただ、これは瞬間的だから大きく見えるのであって、元はと言えばそれぞれの運動エネルギーから分配されるものですので、双方の体内にある糖分が分解されて生成されたカロリーに端を発しています。kcal換算すると0.88[kcal]で、ご飯換算で0.5[g]にしかなりません。これはもちろん体重が重くなると増加し、また、衝突角度が正面衝突に近くなると増えますので、例えば100kgの巨漢が10[m/s]同士で正面衝突すると、失われるエネルギーは1万[J]、ご飯換算で1.42[g]、0.1秒間の仕事率は136馬力となります。
2011年10月07日
【Excel】縦のデータと横のデータでSUMPRODUCTしたい場合は、MMULTを使う。
Excelにてベクトルとベクトルを掛けながらたすには通常「SUMPRODUCT」を使いますが、この関数は同じ行数、同じ列数でなければ使えません。例えば、ベクトルとベクトルの内積をとりたいときはそのベクトルが同じ方向に並んでいなければ使えません。
ところで、行列のかけ算をする際など、縦ベクトルと横ベクトルのSUMPRODUCTをとりたいことが往々にしてありますが、この場合はSUMPRODUCTではだめで、MMULTを使います。
MMULTはまさに行列のかけ算をする(matrix-multiplication)関数ですが、ヘルプには「配列数式」とあります。配列数式とは、いくつかのセルにまとめて計算結果を投入する数式の書き方で、複数セル選択し、数式を記入後、[Shift]を押しながらEnterすると入ります。しかし、配列数式をいれたセルは個別操作ができなくなるなど、結構使い方が面倒です。
MMULTはそのような面倒な関数だったので忌避していましたが、このたび発見したのは、答えとなるセル数が一つの場合は通常のセル関数と同様に扱えるということ。つまり、行ベクトル×列ベクトルの関数は答えが1セルなので、(配列数式でない)通常のワークシート関数として使える、というわけです。
ところで、行列のかけ算をする際など、縦ベクトルと横ベクトルのSUMPRODUCTをとりたいことが往々にしてありますが、この場合はSUMPRODUCTではだめで、MMULTを使います。
MMULTはまさに行列のかけ算をする(matrix-multiplication)関数ですが、ヘルプには「配列数式」とあります。配列数式とは、いくつかのセルにまとめて計算結果を投入する数式の書き方で、複数セル選択し、数式を記入後、[Shift]を押しながらEnterすると入ります。しかし、配列数式をいれたセルは個別操作ができなくなるなど、結構使い方が面倒です。
MMULTはそのような面倒な関数だったので忌避していましたが、このたび発見したのは、答えとなるセル数が一つの場合は通常のセル関数と同様に扱えるということ。つまり、行ベクトル×列ベクトルの関数は答えが1セルなので、(配列数式でない)通常のワークシート関数として使える、というわけです。
2011年10月05日
【備忘録】perlでAmazon S3を使うにあたり、Net::Amazon::S3のインストールに苦労した件
【備忘録】
perlでAmazon S3を使うにあたり、Net::Amazon::S3のインストールに苦労した件です。
perlのシェルから、
%install Net::Amazon::S3
を実行するだけではうまくインストールできなかったので、ググりましたところ、いくつかのライブラリをあらかじめインストールしておく必要があるようです。
参考、というより、このサイトの通り実施したらうまくいきました。
(Perl) LinuxサーバからAmazon S3を用いる (1/2) http://netlog.jpn.org/r271-635/2008/11/perl_linuxamazon_s3.html
gccは入っていたので、入れたのはlibxml2-devel, Bundle::CPAN, LWP, XML::LibXML。libxml2-develはyumにて、ほかはCPANのinstallから。LWP::UserAgent::DeterminedはLWPと一緒に入った模様。そのあと、Net::Amazon::S3をインストール。
しかし、このインストールには非常に多くの関連ライブラリをインストールする必要があるらしく、軽く一時間ほどかかりました。linuxのサーバーからS3へファイル転送したかっただけなのに・・・。
perlでAmazon S3を使うにあたり、Net::Amazon::S3のインストールに苦労した件です。
perlのシェルから、
%install Net::Amazon::S3
を実行するだけではうまくインストールできなかったので、ググりましたところ、いくつかのライブラリをあらかじめインストールしておく必要があるようです。
参考、というより、このサイトの通り実施したらうまくいきました。
(Perl) LinuxサーバからAmazon S3を用いる (1/2) http://netlog.jpn.org/r271-635/2008/11/perl_linuxamazon_s3.html
gccは入っていたので、入れたのはlibxml2-devel, Bundle::CPAN, LWP, XML::LibXML。libxml2-develはyumにて、ほかはCPANのinstallから。LWP::UserAgent::DeterminedはLWPと一緒に入った模様。そのあと、Net::Amazon::S3をインストール。
しかし、このインストールには非常に多くの関連ライブラリをインストールする必要があるらしく、軽く一時間ほどかかりました。linuxのサーバーからS3へファイル転送したかっただけなのに・・・。
2011年09月17日
【備忘録】mod_perlでのIfModule prefork.cの設定
httpdの設定ファイルにおけるIfModule prefork.cの設定事項を勘違いしていて、大変なことになったのでその備忘録。
設定する事項は次の6つ:
このなかで、MaxRequestsPerChildの意味を勘違いしていました。
今動かしているmod_perlのプログラムは、立ち上げにえらい時間がかかってしまうのと(10秒程度、立ち上がってしまえばレスポンスは速い)、消費するメモリが非常に大きい(400MBほど)ため、サーバー数はメモリ限界で押さえて、一度あがったらずっと動き続けてほしい、というもの。よって、StartServersやMaxClientsはマシン限界まで小さく押さえる必要があったのですが、間違ってMaxRequestsPerChildの値まで小さくしていました。
今回は、この値を0(何回リクエストを処理しても再起動しない)にするのが正解でした。幸い、プログラムは立ち上げてしまえば余計なアロケートは一切しないというものだったので、消費メモリが増殖していくこともなく、無事動いています。
あと、蛇足ですが、topで示されているメモリ使用量と実際の使用量が異なるということも今回発見。
大量にメモリを消費するところをライブラリ化して親プロセスにもたせ、perl.confにて
PerlPostConfigRequire /path/startup.pl
で先に読み込み、子プロセスで使用するということをしたところ、topで表示されるメモリ使用量は親と子で同じ。うまくいっていないのかな?とおもってfreeで調べたところ、メモリは親プロセスの分しか消費されていませんで、どちらが本当?と思っていたら、これはCopy On Writeという機能とのこと。
参考:
mod_perlで親プロセスとのCopy on Writeな共有メモリを増やす方法。http://d.hatena.ne.jp/hideden/20080409/1207740439
WebプログラマのためのCopy On Write解説:mod_perl/FastCGIでメモリを節約する方法 http://old.typemiss.net/blog/kounoike/20060212-64
今回、大量にメモリを消費するライブラリ化した部分は参照するだけでなにも書き込まないため、その部分は親プロセスに置いたまま子プロセスからアクセスしており、子プロセスではあたかも全領域を使っているように見えているため、topでは親プロセスと同じだけの消費量になっている、という状況らしいです。なお、こうして切り出した後は、上記で示したMaxRequestsPerChildの値を正の整数にして再起動がかかるようにしたとしても、再立ち上げは親プロセスをコピーするだけ(しかも、コピーされる領域はごくわずか)なので、ほとんど時間がかからなくなりました。
設定する事項は次の6つ:
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 4000
このなかで、MaxRequestsPerChildの意味を勘違いしていました。
今動かしているmod_perlのプログラムは、立ち上げにえらい時間がかかってしまうのと(10秒程度、立ち上がってしまえばレスポンスは速い)、消費するメモリが非常に大きい(400MBほど)ため、サーバー数はメモリ限界で押さえて、一度あがったらずっと動き続けてほしい、というもの。よって、StartServersやMaxClientsはマシン限界まで小さく押さえる必要があったのですが、間違ってMaxRequestsPerChildの値まで小さくしていました。
今回は、この値を0(何回リクエストを処理しても再起動しない)にするのが正解でした。幸い、プログラムは立ち上げてしまえば余計なアロケートは一切しないというものだったので、消費メモリが増殖していくこともなく、無事動いています。
あと、蛇足ですが、topで示されているメモリ使用量と実際の使用量が異なるということも今回発見。
大量にメモリを消費するところをライブラリ化して親プロセスにもたせ、perl.confにて
PerlPostConfigRequire /path/startup.pl
で先に読み込み、子プロセスで使用するということをしたところ、topで表示されるメモリ使用量は親と子で同じ。うまくいっていないのかな?とおもってfreeで調べたところ、メモリは親プロセスの分しか消費されていませんで、どちらが本当?と思っていたら、これはCopy On Writeという機能とのこと。
参考:
mod_perlで親プロセスとのCopy on Writeな共有メモリを増やす方法。http://d.hatena.ne.jp/hideden/20080409/1207740439
WebプログラマのためのCopy On Write解説:mod_perl/FastCGIでメモリを節約する方法 http://old.typemiss.net/blog/kounoike/20060212-64
今回、大量にメモリを消費するライブラリ化した部分は参照するだけでなにも書き込まないため、その部分は親プロセスに置いたまま子プロセスからアクセスしており、子プロセスではあたかも全領域を使っているように見えているため、topでは親プロセスと同じだけの消費量になっている、という状況らしいです。なお、こうして切り出した後は、上記で示したMaxRequestsPerChildの値を正の整数にして再起動がかかるようにしたとしても、再立ち上げは親プロセスをコピーするだけ(しかも、コピーされる領域はごくわずか)なので、ほとんど時間がかからなくなりました。
【備忘録】CPANからライブラリのインストールができなかった理由はmakeとgcc
最近はAmazon EC2で新しいウェブサーバーをたてて、mod_perlでAPIを作っていました。
立ち上げにあたってはいろいろありましたが、現状なんとか運用ができています。もっとも気を遣ったのがレスポンスで、0.02秒以内で計算結果を返さなければならないという所、というのはさておき。
今朝引っかかっていたのが、perlに新しいライブラリをインストールしようとして、ローカルではすんなりできたのに、EC2でうまくいかず、少し悩みましたのでその備忘録。
%perl -MCPAN -e shell
でいきなり、CPAN.pmがありませんでした。で、yum install perl-CPAN。
次に、
%install Math::Random
(正規乱数を使いたかったんです)でインストールがうまくいかず。「???」と思ってログを見ると・・・makeがうまくいっていない。なんでだろうといろいろ調べたところ、なんと、
makeがインストールされていませんでした。そんなアホな。あぁ、でも、ウェブサーバーなら開発環境が無いのが普通か。もしやと思って調べると、gccもインストールされていませんでした。これまであまりウェブサーバーを扱ったことが無くて、いつも計算ソフトウェアの開発に使っていたので、makeやgccが無いなんて思いもよりませんでした。で、それらを入れたら無事、perlのライブラリも入りました。
立ち上げにあたってはいろいろありましたが、現状なんとか運用ができています。もっとも気を遣ったのがレスポンスで、0.02秒以内で計算結果を返さなければならないという所、というのはさておき。
今朝引っかかっていたのが、perlに新しいライブラリをインストールしようとして、ローカルではすんなりできたのに、EC2でうまくいかず、少し悩みましたのでその備忘録。
%perl -MCPAN -e shell
でいきなり、CPAN.pmがありませんでした。で、yum install perl-CPAN。
次に、
%install Math::Random
(正規乱数を使いたかったんです)でインストールがうまくいかず。「???」と思ってログを見ると・・・makeがうまくいっていない。なんでだろうといろいろ調べたところ、なんと、
makeがインストールされていませんでした。そんなアホな。あぁ、でも、ウェブサーバーなら開発環境が無いのが普通か。もしやと思って調べると、gccもインストールされていませんでした。これまであまりウェブサーバーを扱ったことが無くて、いつも計算ソフトウェアの開発に使っていたので、makeやgccが無いなんて思いもよりませんでした。で、それらを入れたら無事、perlのライブラリも入りました。
2011年08月04日
MongoDBを使う
MongoDBを使おうと思ってインストールに失敗した記録。
OSはfedora15で、最初、
yum install mongodb mongodb-server
にてインストール。1.8.0がインストールされました。あっさりインストールできたのでうまく動くかと思ったのですが、db.test.find()が動かない。応答が無くなって、mongoプロセスが100%になります。最初、dbが大きすぎるから時間がかかっているのかと思ったのですが、まっさらのdbで実施しても変わらず。
何かおかしい!と思って、今度はちゃんとmongodbの総本山の10genからyumのリポジトリをもらってきて、
yum install mongo-10gen mongo-10gen-server
を実施したら(1.8.2が入りまして)、治りました。インストラクションはこちら。CentOS and Fedora Packages
以上です。
OSはfedora15で、最初、
yum install mongodb mongodb-server
にてインストール。1.8.0がインストールされました。あっさりインストールできたのでうまく動くかと思ったのですが、db.test.find()が動かない。応答が無くなって、mongoプロセスが100%になります。最初、dbが大きすぎるから時間がかかっているのかと思ったのですが、まっさらのdbで実施しても変わらず。
何かおかしい!と思って、今度はちゃんとmongodbの総本山の10genからyumのリポジトリをもらってきて、
yum install mongo-10gen mongo-10gen-server
を実施したら(1.8.2が入りまして)、治りました。インストラクションはこちら。CentOS and Fedora Packages
以上です。
2011年07月07日
B型
血液型や星座が性格を決めるとはこれっぽっちも思っていませんが、血液型や星座が性格を決めると幼少の頃から聞かされて育つ日本人は血液型や星座で性格が異なる可能性がある。だから結果として、血液型や星座と性格にある種の相関関係があってもいいんじゃないか。
ところで、弊社のスタッフ紹介にはなぜか血液型と星座が記載されています。社長の趣味だと思いますが。これまではA型が幅をきかせていまして、B型としては少々肩身が狭かったのですが、ここに来てB型率が急激に増加しています。心強い限りです。
ゴーガ スタッフ紹介
ところで、弊社のスタッフ紹介にはなぜか血液型と星座が記載されています。社長の趣味だと思いますが。これまではA型が幅をきかせていまして、B型としては少々肩身が狭かったのですが、ここに来てB型率が急激に増加しています。心強い限りです。
ゴーガ スタッフ紹介




