WordPress上でAPCのエラー→メモリ調整

そんな爆発的な数のアクセスを裁くわけでもなしー、と、さくらのVPSを使ってデフォルト適当に動かしていたところ、一部WordpressサイトでAPCのメモリ不足だとエラーが出まくる。
「Unable To Allocate Memory For Pool」
こりゃ調整しないといけない。

apc.phpを眺めつつ、たぶんプラグイン入れまくりで何かあるよなーと思うもWPはWPで対処するとして別件に。
サーバー設定としては単純にAPCのメモリ割当量を増やせば解決!というわけにもいかないので、そもそものメモリ割当量が多すぎなんじゃないのかということで調整。
CentOS6、メインメモリ2GB。

/etc/php.d/apc.ini
apc.shm_size = 128M
apc.mmap_file_mask=/dev/zero

php および APC の設定を行う | レンタルサーバー・自宅サーバー設定・構築のヒント
メモリ2GBなので128MBに。1GBで64M、512MBで32Mが適量のよう。

それでもまだエラー出る。しかしこれ以上は増やせない!
ということで1プロセスあたりのメモリを減らすためにapacheのモジュールを外す。

ウェブ開発者のための、1時間でできるLAMP環境構築術(CentOS編) – さくらインターネット創業日記
参考になります。

とりあえずまだPreforkで動かしているので
/etc/httpd/conf/httpd.conf
<IfModule prefork.c>
StartServers 10
MinSpareServers 5
MaxSpareServers 15
ServerLimit 256
MaxClients 128
MaxRequestsPerChild 2000
</IfModule>

と設定して様子見。
KeepAliveはOff。

今のところ穏やか。

古いLinux PC ServerをKVMで救う

依頼が来ました。
「8年ぐらい前に導入したシステムが動かなくなっちゃってなんとかしてくれ」

聞けば中身はWindowsクライアント+Linuxサーバーのシステムで、状況だけ聞くに、サーバー強制終了が多発して、要fsck(ディスクチェック)状態なんだがLinuxワカリマセーン状態なので本当にどうしようもないとのこと。
すでにハードウェアもソフトウェアもサポートが切れており、どんな方法でもいいので継続して使いたいとのことでした。

さて、現場に行ってみると、Linuxサーバーは自作PCで組まれたTurboLinuxのものでした。HDDはARAID99-1000L!懐かしい!
まず、起動してみると十数秒で強制終了。どうもチップセットの冷却がうまくいってないことによるようです。ファンが回ってない。壊れてる。
マザーボードごと取り替えることも検討しましたが、古いマザーボードなので同型も手に入りません。また中古でしか手に入らないのでその後の安定性に不安があり、この線は諦め。

DSC_0787
続きを読む

Windows Server 2008 R2へ2012のリモートデスクトップCALをインストール

Windows Server 2008 R2でリモートアプリを提供することになりまして、
リモートデスクトップのライセンスが必要になります。
もともとStandardで5ユーザーのCALがあるんですが、リモートデスクトップをadministratorの用途以外で使うとなると、リモート用のCALを足さないといけないんですね。

2008 R2なので2008 R2用のリモートデスクトップCAL 5Usersを探していたんですが、もう売ってないんですねコレ。
調べたら2012用のものを使えるということなので、一応MSに電話して確認を取って購入へ。

しかしRDS CALのパッケージなんてそうそう置いてあるもんじゃありません。
秋葉原でsofmapとヨドバシに問い合わせましたがいずれも取り寄せ。当たり前か。
amazonは奇跡的になぜか在庫があったので買いました。お急ぎ便で即到着。

で、このCALを持ってサーバーへ赴き、役割サービスからリモートデスクトップサーバーをインストールして構成します。
RDライセンスサーバーをアクティブ化したりで、自動では進みませんが、とりあえずできた。

続いてRDライセンスマネージャーを開き、CALのインストールを行います。
オンラインでサクサクーっと……いかなーい!
正しくないと言われる。
2012のCALで2008R2でも動くって書いてあったよね、電話でも言ってたよね、おーい…

rdp-cal-property

仕方ないので電話認証にしました。
BとDとTとか、MとNとか、AとKとか、電話口だとわかりにくいので窓口のおねえさんはフォネティックコードっぽい感じの読みを加えて教えてくれました。

和文通話とフォネティック・コード
普通BはBravoなんですけどBrazilだったりCがCanadaだったり、国名が多かった印象。
MだったらMicrosoftって言うのかなw

rdp-cal-install

そんなわけで無事に認証が通りました。
ネット経由でダメでも電話ならなんとかなる場合もあるんですなー。

WordPressの管理画面にアタックが来まくるので認証をかけて対応した

タイトルが全て!

なんだかサーバーが重いと思ったらhttpdの負荷が高くloadavgも高い。
アクセスログを見たら海外のIPアドレスからPOST /wp-login.phpばっかり。

こりゃ重くもなるわなーということで手っ取り早くwp-login.phpにbasic認証をかける。

Apacheのhttpd.confにて

<FilesMatch wp-login.php>
  AuthType Basic
  AuthName "wordpress protection" (てきとう)
  AuthUserFile /path/to/.htpasswd
  AuthGroupFile /dev/null
  require valid-user
<FilesMatch>

再読み込みさせたらみるみるうちに負荷が下がりました。
ちなみにVirtualHostでなく全体に有効にしたので各ユーザーへの連絡が大変です。

しかし今後も増えるかもしれませんしなー…
wordpressとしては一定回数のエラーでロックをかけるような実装に向かっているとか。

lighttpdだと

$HTTP["host"] == "example.com" {
(いろいろ略)
  auth.backend = "htdigest"
  auth.backend.htdigest.userfile = "/path/to/.htdigest"
  auth.require = (
    "/wp-login.php" => (
      "method" => "digest",
      "realm" => "wordpress protection", (てきとう)
      "require" => "valid-user"
    ),
  )
}

な感じになるはず。(たまたまdigest認証でしたけど)