タグ

ブックマーク / naoya-2.hatenadiary.org (16)

  • Linux のスリープ処理、タイマ処理の詳細を見る - naoyaのはてなダイアリー

    UNIX でプロセスを一時的にスリープさせるには sleep(3) が使えます。sleep() は引数に秒単位でしか時間を指定できないので、より短い時間を指定したい場合は usleep(3) (マイクロ秒) や nanosleep(2) (ナノ秒) を使うことになります。sleep(), usleep() はライブラリ関数、nanosleep() はシステムコール*1です。 この usleep() や nanosleep() で 1ms 程度の短い時間プロセスを停止したとして、正確にその時間だけ停止させることはできるでしょうか。http://shiroikumo.at.infoseek.co.jp/linux/time/ にあるコードを参考に、実際に動かしてみます。カーネル 2.6.19 x86_64、CentOS 5 で試します。 まず、nanosleep() で 1ms のスリープを行

    Linux のスリープ処理、タイマ処理の詳細を見る - naoyaのはてなダイアリー
  • あるプロセスが利用しているメモリサイズを procfs 経由で調べる - naoyaのはてなダイアリー

    お題は「あるプロセスがどの程度の物理メモリを利用したかを知りたい」です。 手っとりばやく知りたいときは top や ps などで調べると良いでしょうか。例えば手元の coLinuxtop して M キーでソートすると emacs のプロセスが最もメモリを使っているようです。 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1923 naoya 18 0 23120 19m 3096 S 0.0 2.0 0:55.40 emacsメモリサイズは VIRT と RES がありますが、VIRT は Virtual の略で仮想メモリ領域のサイズ、RES が Resident の略で、実際に使用している物理メモリ領域のサイズ。19MB ほど使っているようです。この emacs のプロセスが利用するメモリ領域はざっくり 20MB 程度と

    あるプロセスが利用しているメモリサイズを procfs 経由で調べる - naoyaのはてなダイアリー
  • inetd の仕組みを見てみる - naoyaのはてなダイアリー

    inetd や xinetd (以下 inetd) はインターネットサービスをデーモン化するのに共通している処理を担い、ほとんどの時間をアイドル状態で過ごすその手のサービスに必要なリソースを節約する役割を果たします。 inetd のひとつ面白いところは、inetd でサービス化したいプログラムの標準入力/標準出力がクライアントソケットの入出力に接続されるところです。例えば daytime 相当のサービスを自分で作ろうと思った場合 #!/usr/local/bin/perl # daytime.pl use strict; use warnings; use DateTime; use IO::Handle; STDOUT->autoflush(1); STDOUT->printf( "%s\n", DateTime->now(time_zone => 'Asia/Tokyo') ); と標

    inetd の仕組みを見てみる - naoyaのはてなダイアリー
  • LTSV FAQ - LTSV って何? どういうところが良いの? - naoyaのはてなダイアリー

    LTSV って何? Labeled Tab-Separated Values という、テキストのフォーマットの仕様です。CSV や TSV や JSON そのほかと同じ、テキストデータのフォーマット名。主にログ、特に httpd のアクセスログなどに適用すると便利です。 仕様は http://ltsv.org にまとまっています。随時更新中です。 LTSV は単なるログのフォーマットであって、それ以上でもそれ以下でもありません。 LTSV ってタブ区切りで値に名前を付けただけのもの? はい、そうです。 これが 127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 "http://www.example.com/start.html" "Mozilla/4.08 [en] (

    LTSV FAQ - LTSV って何? どういうところが良いの? - naoyaのはてなダイアリー
  • 開発メモ#3 : レガシーなCGIアプリケーションのリファクタリング - naoyaのはてなダイアリー

    開発メモその3です。今回は Perl のおはなし。 何年も前に作ったウェブアプリケーションのコードを開いてみたら黒歴史なコードが出てきて憂な気分になる、そんな経験ありませんか。私はあります。ずっとそんな現実から目を背けて生きてきました。 さて、先日 Perl + CGI で書いて Apache::Registry で高速化している、実行環境が Apache に癒着した CGIアプリケーションを発見しました。おえ〜っ。一から作り直したい気持ちをぐっと堪えて、これを Plack 化したりとリフォームしていくとしましょう。その過程を以下記します。劇的ビフォア・アフター! ・・・とかは期待せず、地道な変更を積み重ねていくのがコツです。 方針 いきなりコードをがりがり書き換えていくというよりは、試行錯誤のしやすい環境に移行させていきながらリフォームを進めます。遠回りですが、結果的にその後の運用が楽

    開発メモ#3 : レガシーなCGIアプリケーションのリファクタリング - naoyaのはてなダイアリー
  • ファーストサーバ社の障害に関して - naoyaのはてなダイアリー

    あまりまとめられないので箇条書きで。 「クラウド (IaaS)」と「レンタルサーバ」の区別 技術的には「クラウド (における IaaS)」と「レンタルサーバー」は明確に異なるものなので、そこは混同されないことをおすすめしたい 今回障害が起こったファーストサーバのサービスはレンタルサーバであって、クラウドサービスではないだろう クラウド = Amazon Web Services (AWS) や Heroku がその代表例だと思ってもらえばいい *1 具体的には、日経新聞の当該記事のこと → http://www.nikkei.com/article/DGXNASFK2600L_W2A620C1000000/ 意図は不明だが「クラウド」のような目新しいものと今回の事件とを結びつけて何かしらの印象を与えようとするのは、個人的には感心しない 業者が「クラウド」と謳っていたかどうかは知らない。例え

    ファーストサーバ社の障害に関して - naoyaのはてなダイアリー
    iww
    iww 2012/06/27
    日本ではレンタルサーバのことをクラウドと呼んでいる という話
  • naoyaのはてなダイアリー - Linuxのページキャッシュ

    世間では PHP が、Perl が、と盛り上がっているようですが空気を読まずまたカーネルの話です。今回はページキャッシュについて。 /dev/shm に参照系DBを持っていくと I/O 負荷が激減した件(当たり前だけど) - drk7jp で、ディスク上にあったファイルを /dev/shm (tmpfs) に移したら I/O 待ちがなくなって負荷がさがった、ということなんですがおそらくこれは tmpfs に置く必要はないかなと思います。Linux (に限らず他の OS もそうですが) にはディスクの内容を一度読んだらそれはカーネルがキャッシュして、二度目以降はメモリから読む機構 = ページキャッシュがあります。tmpfs にデータを載せることができた、ということは物理メモリの容量に収まるだけのデータサイズかと思うので、放っておけば該当のファイルの内容すべてがメモリ上にキャッシュされて io

    naoyaのはてなダイアリー - Linuxのページキャッシュ
    iww
    iww 2010/08/06
    insane【形】正気でない、狂気の
  • naoyaのはてなダイアリー - MyISAM vs InnoDB

    あくまで憶測で仮説でしかないんですが。 MySQL のストレージエンジンのうち代表的な二つ、MyISAM と InnoDB はよく MyISAM: Read は速いけどテーブルロックのため並行性が低い。運用が簡単。 InnoDB: MyISAM より Read は遅いけど並行性が高い 。行レベルロックなので。あとトランザクションや外部キー制約。運用が MyISAM よりちょっとめんどくさい。 という区別がされます。ここから転じて、 MyISAM は参照系クエリが大部分を占める場合に適用すると良い。例えば blog アプリケーションとか。 InnoDB は更新系クエリが多い場合に適用すると良い。 と言わたりします。実践ハイパフォーマンスMySQL でも第2章 ストレージエンジン(テーブル型) P.30 に アプリケーションでトランザクションを使用する必要がなく、主に SELECT または I

    naoyaのはてなダイアリー - MyISAM vs InnoDB
  • Linux カーネルのコンテキストスイッチ処理を読み解く - naoyaのはてなダイアリー

    Linux カーネルのプロセススケジューラの核である kernel/sched.c の schedule() を読み進めていくと、タスク切り替え(実行コンテキスト切り替え)はその名も context_switch() という関数に集約されていることが分かります。2.6.20 の kernel/sched.c だと以下のコードです。 1839 static inline struct task_struct * 1840 context_switch(struct rq *rq, struct task_struct *prev, 1841 struct task_struct *next) 1842 { 1843 struct mm_struct *mm = next->mm; 1844 struct mm_struct *oldmm = prev->active_mm; 1845 184

    Linux カーネルのコンテキストスイッチ処理を読み解く - naoyaのはてなダイアリー
  • MapReduce - naoyaのはてなダイアリー

    "MapReduce" は Google のバックエンドで利用されている並列計算システムです。検索エンジンのインデックス作成をはじめとする、大規模な入力データに対するバッチ処理を想定して作られたシステムです。 MapReduce の面白いところは、map() と reduce() という二つの関数の組み合わせを定義するだけで、大規模データに対する様々な計算問題を解決することができる点です。 MapReduce の計算モデル map() にはその計算問題のデータとしての key-value ペアが次々に渡ってきます。map() では key-value 値のペアを異なる複数の key-value ペアに変換します。reduce() には、map() で作った key-value ペアを同一の key で束ねたものが順番に渡ってきます。その key-values ペアを任意の形式に変換すること

    MapReduce - naoyaのはてなダイアリー
  • naoyaのはてなダイアリー - MySQL の負荷分散に LVS + keepalived を使う

    あとで書く、と言った手前なので書くとします。 DSASの中の人がすごい勢いで LVS の話を書いてくれてます。この辺。LVS を使うと Linux と箱でロードバランサが作れちゃいます。普通に買ったら数百万とかしちゃうやつ。 DSAS の中のひとに感謝しつつ、いい機会なのでやってみよう! と思っていろいろ試して昨日あたりからはてなの中でも LVS + keepalived で動かしはじめてます。いまのところ問題なし。 そのロードバランサをどこに使ってるかですが、普通ロードバランサというとインターネットからの入り口のところに置いてウェブサーバーの負荷分散に使うイメージがあります。が、今回ははてなでは MySQL のスレーブの手前に置くという役割でとりあえず使いはじめました。 +-----------+ +-----------+ | mod_perl | | mod_perl | +----

    naoyaのはてなダイアリー - MySQL の負荷分散に LVS + keepalived を使う
  • naoyaのはてなダイアリー - tmpfs は本当に容量が動的なのか

    Linux には tmpfs という便利なファイルシステムがあります。 $ mount -t tmpfs -o size=64m tmpfs /dev/shm $ mount -t tmpfs -o size=64m /dev/shm /var/tmpとすると、/var/tmp がディスク上ではなくメモリ上に作られたファイルシステムとして mount されます。なので、/var/tmp は I/O 時にディスクI/Oが一切発生しない高速なディスクとして使えると。いわゆる RAM ディスク。(もちろんサーバーの電源を落とすと保存したファイルは消えます。) この tmpfs はなかなかに便利で、キャッシュとかそういうものでディスクにおいてたものここ置くと、ディスク I/O がカットできて超高速になります。はてなでは MySQL のスレーブの MyISAM のファイルを tmpfs において、オ

    naoyaのはてなダイアリー - tmpfs は本当に容量が動的なのか
  • Linux I/O のお話 write 編 - naoyaのはてなダイアリー

    write はページに dirty フラグを立てるだけなので決してユーザープロセスを待たせない って、当にそうなんでしょうか?(否定しているわけではなく、純粋な疑問です。) と質問をもらったので、最近追ったことをここでまとめます。かなり長文です、すいません。また、まだまだ不勉強なので間違っているところもあるかもしれません。ツッコミ大歓迎です。 まず、オライリーのカーネルの 15章 ページキャッシュ 15.3 汚れたページのディスクへの書き込み から引用。 ご存知のように、カーネルは、ブロック型デバイスのデータを含むページをページキャッシュに蓄えています。プロセスが何らかのデータを更新した場合は、必ず対応するページに汚れている印をつけます。すなわち、PG_dirty フラグを設定します。 UNIX システムでは、汚れたページのブロック型デバイスへの書き込みを遅延することができます。この方

    Linux I/O のお話 write 編 - naoyaのはてなダイアリー
    iww
    iww 2007/05/24
    『明示的に sync する場合は待たせる』
  • naoyaのはてなダイアリー - 負荷とは何か

    調べごとをしたので blog に書いて理解を深めようのコーナーです。長文です。 Linux でシステム負荷を見る場合にお世話になるのが top や sar (sysstat パッケージに同梱されてるコマンド) などのツールです。 top ではシステム統計のスナップショットを見ることができます。今システムがどういう状態かなーというときは top が便利。 top - 08:16:54 up 3 days, 14:43, 6 users, load average: 0.18, 0.07, 0.03 Tasks: 43 total, 2 running, 41 sleeping, 0 stopped, 0 zombie Cpu(s): 18.2% us, 0.0% sy, 0.0% ni, 81.8% id, 0.0% wa, 0.0% hi, 0.0% si一方の sar では10分ごとのシ

    naoyaのはてなダイアリー - 負荷とは何か
  • naoyaのはてなダイアリー - ライブドアの技術の話

    今回のライブドアの件で、「ライブドアは虚業」、とか「日のネット企業は心を改めて技術を磨け」みたいな論調を良く見かけるわけですが。 いずれ誰かが書くだろうと思っていて、やっと出てきたライブドアの技術の話。 ライブドアが意外と技術系っぽいことについて - 圏外からのひとこと ライブドアが普通に技術系であることについて - 圏外からのひとこと ライブドアの直近の財務諸表なんかを見ると確かに証券周りなどの売り上げの占める割合が多かったりもしますが、その企業の設立当初から今に至るまでその屋台骨を支えてきたのは間違いなくライブドアが持っている確かな技術で、日のウェブ関連企業の中でもその技術レベルの高さは、その辺でなんとか 2.0 だとか声高に言ってる企業なんかよりも遙かに高いと思ったほうが良いでしょう。 圏外からのひとことの中で示されていたポインタ以外にも、最近の取り組みは以下のリンクが参考になる

    naoyaのはてなダイアリー - ライブドアの技術の話
  • prototype.js でデザインパターン - Iterator

    Ruby on Rails や Catalyst のプラグインなんかでは prototype.js という JavaScript のライブラリを使って、Ajax サポートを実現しています。prototype.js とフレームワークが必要な Ajax の JavaScript コードを吐き出してくれるので、Ruby プログラマや Perl プログラマは JavaScript の実装を意識しなくても Ajax なインタフェースが作れる、という風になっています。 こんな感じで prototype.js は Ajax な部分に注目が集まっていますが、ほかにも "Class-style OO" なフレームワークも内包してます。 JavaScript はプロトタイプベースのオブジェクト指向言語で、C++Java のようなクラスベースのオブジェクト指向言語とはちょっと実装が異なります。プロトタイプ

    prototype.js でデザインパターン - Iterator
  • 1