KLab Advent Calendar 2011 「DSAS for Social を支える技術」の7日目です。 @methane の新シリーズは Apache+php のチューニングです。 今日のお題は、タイトルのとおり、phpのプロセス数(=並列数)を減らすことです。 これはチューニンガソンでも人気のチューニングだったのですが、 今日はそのメリットをまとめます。 ロードアベレージが下がる プロセス数をコア数+α程度に抑えると、ロードアベレージがコア数の数倍〜 数十倍になることがなくなります。 例えばロードアベレージがコア数の100倍になると、1リクエストの処理に かかる時間は100倍以上に増え、せっかく処理したのにクライアント側が タイムアウトしていて完全に無駄骨になったり、最悪では再リクエストが来て さらに負荷が上がる負のスパイラルに陥る可能性があります。 たくさん一気に処理しよう
PHPのJITコンパイラ「HipHop Virtual Machine」、Facebookがオープンソースで公開 HipHop Virtual Machineは、PHPを高速に実行するためにPHPのコードをC/C++に変換してg++でコンパイルし、バイナリコードにするHiphop compiler(hphpc)と、PHPのインタプリタであるHipHop interpreter (hphpi)を組み合わせたもの。PHPのコードをダイナミックにバイナリコードへと変換することで、高速な実行を目指しています。 コンパイラと同等以上の実行速度へ HipHopはFacebookが開発し、オープンソースとして公開しています。今回のHipHop Virtual Machineも、これらの開発の延長線上にあるものです。 Our experiences with hphpc led us to start e
米Facebookは12月10日、PHPのJIT(Just-In-Time)コンパイラ「HipHop Virtual Machine(hhvm)」を発表した。PHPコードを高速に実行するためのランタイム環境で、LinuxとFreeBSDに対応する。現在Facebook内のテスト環境で採用されているという。オープンソースで開発されており、ライセンスはPHPおよびZendライセンス。 hhvmはPHPの高速化を目指してFacebook社内で開発された仮想マシン技術。Facebookは先にPHPコードをC++コードおよびバイナリに変換するHipHop interpreter(hphpi)やHipHop compiler(hphpc)を開発、採用していたが、hhvmはそれをさらに発展させたものとなる。 hphpiやhphpcはPHPコードを「AST」と呼ばれる中間コードに変換した後にC++コードに
10/1(土)にチューニンガソン2 というイベントに参加してきました。 もちろん前回に引き続き優勝を 目指していたのですが、今回は残念ながら2位でした。 今回もどんなチューニングをしていたのかの記録を公開します。 (ちなみに優勝したのは元KLabの濱野さんで、同じく メモを公開されています。) 今回のチューニンガソンのお題は、 Wikipedia の高速化で、 MediaWiki と Wikipedia の データが入った MySQL のデータには修正を加えずに、ランダムな100ページの表示速度を競いました。 マシンはメモリ1GBでデュアルコアのものが2台で、今回はWebサーバーの部分は自由に構成できます。 1. ボトルネックの確認 とりあえず AMI Linux の標準の php + apc で計測したところ、1ページの表示に1秒くらい使っています。 またphpか!ということで、やっぱり
補足 この記事は旧徳丸浩の日記からの転載です(元URL、アーカイブ、はてなブックマーク1、はてなブックマーク2)。 備忘のため転載いたしますが、この記事は2010年9月27日に公開されたもので、当時の徳丸の考えを示すものを、基本的に内容を変更せずにそのまま転載するものです。 補足終わり PHPカンファレンス2010にて「文字コードに起因する脆弱性とその対策」というタイトルで喋らせていただきました。プレゼンテーション資料をPDF形式とslideshare.netで公開しています。 文字コードのセキュリティというと、ややこしいイメージが強くて、スピーカーの前夜祭でも「聴衆の半分は置いてきぼりになるかもね」みたいな話をしていたのですが、意外にも「分かりやすかった」等の好意的な反応をtwitter等でいただき、驚くと共に喜んでいます。土曜にPHPカンファレンスに来られるような方は意識が高いというの
補足 この記事は旧徳丸浩の日記からの転載です。元URL、アーカイブ、はてなブックマーク1、はてなブックマーク2。 備忘のため転載いたしますが、この記事は2010年7月1日に公開されたもので、当時の徳丸の考えを示すものを、基本的に内容を変更せずにそのまま転載するものです。 補足終わり PHPのデータベース・アクセス・ライブラリPDOは、DB接続時の文字エンコーディング指定ができないため、文字エンコーディングの選択によっては、プレースホルダを使っていてもSQLインジェクション脆弱性が発生します。 追記(2011/06/19) ここに来て急にブクマが追加されはじめていますが、このエントリを書いてから状況が改善しています。PHP5.3.6(2011/03/17)にて、PDOでもデータベース接続の文字エンコーディングを指定できるようになりました。この版で、UNIX版のPHPでは解決しましたが、Win
PHP: Hypertext Preprocessor PHP開発チームはPHP6におけるUTF-16化を断念。開発ブランチをPHP5.3へロールバックし、これまでに開発した機能をロールバックしたブランチへバックポートするという方針へ変更した。これはPHP6で取り組まれたUTF-16対応実装が予想以上に困難だったためと、UTF-16に移行することで得られる利益よりも不利益が多いことが判明したためだ。PHPにおける文字集合とエンコーディング回りの議論は振り出しに戻った。 しかし、変化は確実に訪れている。Mind the encodings!において「default_charset」がiso-8859-1からUTF-8へ変更されたことが紹介されている。ブラウザはサーバからのデータにエンコーディングの指定がなかった場合、これまではISO-8859-1をデフォルトエンコーディングとしていた。逆にP
「PHPerの問題点はPHPしか知らずに的外れなことを言うことだ」と、Javaしか知らなくて的外れなことを言っている連中にすら言われちゃってるPHPerのみなさん、こんにちは。 PHPは「使える道具」であることは事実です。しかし同時に言語仕様がウンコなのも事実。 ここでは、個人的にウンコだと思っているPHPの仕様を挙げてみたよ! htmlspecialchars() の名前が長すぎる これはほんとウンコ。おまえWebアプリのための言語やろが!なんでこの関数の名前がこんなに長いねん!こんだけ長かったらめんどくさがって echo $var としてまうやろが!WordPressのthemeでHTMLエスケープ忘れが多いのはおまえの名前が長すぎるせいだ! そんなわけで、全PHPerはこんな関数を定義するといいと思うよ。 ## echo $var; よりも短く h($var); と書ける! func
スクリプト言語の範疇に入らないかもしれない言語を使っているPHPerのみなさん、こんにちは。 PHPの歴史は、Disられ罵られバカにされ続けた歴史です。 本日は、その歴史を紐解いてみたいと思います(一部、PHP擁護派のエントリも含んでいます)。 なおここで紹介していない記事で、ほかに紹介してほしいものがあれば、教えてください。 あと引用は一部のみなので、元記事の全文を読むことを強くお勧めします。 2006年 PHPプログラマ in YAPC::Asia 2006 Tokyo - 0330 (twk @ ふらっと) では、PHPの世界に帰ります。Perlの人はRubyをうらやみHaskellにおどろきPHPを軽蔑すると言う文化になっているようです。 このころには、すでにPHPは軽蔑される存在だったようです。 昔、2ちゃんとかでよくあった、Perl = C++ , PHP = VBってな感じ?
先日のエントリーでも少し触れたが、PHPの最大の問題点は、それが持つ「一見その言語構造がよくあるプログラミング言語の形をとりながら、プログラミング言語の最も大切なところを外している『えせプログラミング言語』である」点にある。Webアプリケーションの開発で注意すべき部分とは何かを根底の部分でちゃんと理解せずにPHPアプリケーションを作ると、後々ひどい目に会うので注意が必要である。 その意味では「PHPでプログラミング言語を学ぶ」などもっての他だし、「JavaでもPHPと同じようなプログラミング言語を作ってWebアプリの開発を効率化しよう」などという発想もとても危険である。 PHPの発想の根底には、「HTMLテンプレート用言語とロジック記述用言語の統一により、開発コストを減らそう」という CGI 時代の安易な発明がある。PHPは、その前近代的な発想を通じて、テンプレートとロジックを同じファイル
スライド1: モダンなモバイル開発のススメ (PHP編)2009/02/14北海道LOCAL合同勉強会亀本 大地(a.k.a: yudoufu) スライド2: 謝辞・ 発表の機会を与えてくださったLOCALの皆様、ありがとうございます!・ ちゃんとした講演の場だと思わず、しゃしゃりました<(_ _)>・ 空気読めてないタイトル提出してすいません><・ 午睡の時間のつもりで聞いてね! スライド3: 自己紹介・ ゆどうふ(id:Yudoufu)・ 湯豆腐好きなので。・ http://wassr.jp/user/yudoufu・ 本名:亀本大地・ 1981年生まれ・ でってぃぅ・ 所属:アシアル株式会社 →・ PHPのシステム構築とかスクールとかやってます。・ 最近iPhoneとかAndroidとかもやってます。・ ObjectiveC、イイ。。。 スライド4: 作った公開物とか・ T
XSSで何ができるか? cookie情報、formの送信内容を盗む、偽の情報を見せる 「信頼出来ないWebサイト」でのXSSはそもそも無意味 信頼してほしいならXSSくらい直せ イントラだったら関係ない? むしろイントラ内の方が盗みたい情報がいっぱいある JSONによる秘密情報の漏洩 JSON Hijacking Object.prototype.__defineSetter_で特定プロパティが設定されたら何らかの処理を行うようにする。 JSONをHTMLとして読み込むと上記のコードが入る。 対策 先頭にwhile(1);をつけて、JavaScriptとして実行出来ないようにする(Googleがやった) POSTのみ許可 XHRで特定のリクエストヘッダをつけるようにする レスポンスヘッダにcharsetを指定する charsetにUTF-7を指定すると、きちんとエスケープされているJSON
それでもhtmlentities()はひどい。HTMLにあるのは数値文字参照と文字実体参照で、そのふたつを総称して文字参照と呼ばれることはあるが、HTMLエンティティと呼ばれることはない。HTMLエンティティという言葉からHTMLの仕様にたどり着くのは難しいだろう。 PHP畑の人と会話していると、たまに用語に違和感を感じることがあります。特に実体参照のことを「HTMLエンティティ」とか「エンティティ化」と呼んでいる人がけっこういるようなのですが、これは htmlentities() の影響なのかもしれません。 別途定義された実体 (entity) を参照 (reference) するから実体参照 (entity reference) なのでして、実体というのは実体宣言で定義された何かを指します。「リファレンス化」ならまだしも、「エンティティ化」では意味が逆になってしまうと思うのですが……。
Emacs使いなら普通に使ってるよね、ってな素晴らしいEmacs Lispの一つにFlymakeというのがあります。これは名前の通り、Emacsでファイル編集中にon the flyにmake(設定次第で何でも)してくれるEmacs Lispです。makeしてエラーが出た場合には、エラー箇所をハイライトしてくれます。typo などがあれば瞬時に気づくことができますので、開発効率がアップします。 青くハイライトされているのがwarning、赤はエラーの意味です。 PHPもJavaScriptも他の方が設定を公開されていますけど、社内で設定を紹介したところ、「Warningに別の色が付いたりしないんですね」などと言われたので、ムキになってWarningにも色を付けてみました。そんなわけで、他の方の設定とはひと味違うと思います。実はPHPに関して言うと滅多にWarningが出ないので、便利になっ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く