Home

cyrill.lilect.net : サーバー情報兼東方萃夢想雑記置き場

停電トラブル

本日16:00頃、雷による停電によりUPSの停止信号が発動し、サーバーが停止するトラブルがありました。

サーバーダウンの報告

  • 2010-06-01 (火)
  • 未分類
  • 作成者:cyrill

もう信頼性なんてどこへやらって話になってしまうのですが、ファイルシステムが飛んでしまい、サーバーマシンが正常に動作しなくなってしまっていました。このままではまともに運用できない状態でしたので、画像ファイルとデータベースだけ拾って、すべて消し去って、OSの再インストールからやり直しておりました。

結果、32時間ほど利用できなくなっていました。ホント、申し訳ないです。極力急いで復旧させようとは思っていたのですが、手間がかかってしまいました。

注意:一部のファイルが飛んでいるかもしれませんが、ご勘弁をお願いします。

OutOfMemoryErrorから判明したBufferedInputStream.readの間違い

今回はロダとか萃夢想とか関係なく、Javaの話。
あ、萃夢想は少し関係があるかも。

DataInputStream dis = ...;
int size = dis.readInt();
byte b = new byte[size];

必要なとこだけ抜き出すとこんな感じのコードを書いていたのですが、new byteでOutOfMemoryError: Java heap space。

disはSocketから読み込むようになっていて、ローカル環境でテストをしている場合は何の問題も発生しないのに、サーバーで動かすと発生。
普通に考えればsizeがおかしいと思うので、ログに出力させてみると539897390。500MBくらいのメモリを確保しようとしていました。そりゃ無理だって話。

readInt()で読んでいるデータがおかしい→送信したデータが壊れてる?
いやいや、そうではないのです。readInt()が読んでいるのは、バッファに残っているデータだったのです。

実はsize用のデータだけでなく、このストリームには色々なデータを流し込んでいるのですが、
その色々なデータを読み込んでいる箇所、例えばこんな感じで書いちゃっていたのですが・・・。

dis.read(b);

これ。実は非常にまずいです。
b.lengthだけ読み込まれるとは保障されていないのです。
Java Docを眺めていると、b.lengthだけ読み込まれるまでブロックされるような気がしていたのですが、そんなことはありませんでした。
というか、勝手な勘違いをしていました・・・恥ずかしい。Java Docにはこう書いてあるのです。

戻り値:
バッファに読み込まれたバイトの合計数。ストリームの終わりに達してデータがない場合は -1

読み込まれたバイト数 = b.lengthとは限らないのです。そりゃそうですね・・・。

Socketからデータを読むときには、意図したようにデータが読まれていないかもしれないので、readメソッドの戻り値をちゃんと確認しましょう・・・。この辺りの知識不足がなんちゃってプログラマから抜けられない理由なんだろうなあ・・・。

Java版アップロードアプリケーションの更新

Java Upload Version 1.6を公開しました。本バージョンからJavaアプレットではなく、Java Web Startによって起動するJavaアプリケーションになりました。つまり、ページを開かずともJava Web Startからアプリケーションとして起動することが出来ます。

基本的な機能はVersion 1.4以前とあまり変わっていませんが、アップロード時にサーバーへの負担を減らすように改良されています。サーバー負担を減らしてやるぜ!って方は是非こちらの利用をお願いします。

ミラー復活

  • 2010-03-27 (土)
  • 未分類
  • 作成者:cyrill

Lilectさんのサーバーの再スタートに伴い、バーボンアップローダのミラー機能も復旧しました。ここ数日接続がやや安定していなかったかと思いますが、既にラウンドロビンが有効になっており、今後は安定するかと思われます。利用者の方々には、ご迷惑をおかけしましたことをお詫び申し上げます。

OpenVPN 2.1.1を導入するにあたって

OpenVPN 2.1.1のインストールがrpmでできるということで、パッケージマネージャーから簡単にインストールしたのですが、「/usr/share/doc/openvpn-2.1.1/」に「easy-rsa」がない、見つからないということがあり、少し困りましたというお話です。

全文を読む

結局

サーバーダウン原因はおそらくディスクの空きがなくなったのが原因でしょう。システム用とファイル用に分けているんですが、システム用に空きがなくなり様々な不都合が出た・・・というところかと。

ログの出力先がシステムパーティションなのがまずい気がしますが、現段階ではどうにもできないので、Apacheのログに圧縮をかけることで対応。

いっそのこと通ったファイルに関してはログを取らなくてもいいのではと思いましたが、ないと困ることもあるだろうということで、一応残すことに。テキストで1GB余裕でしただから困る・・・。

今後はもうちょっと早く気づかないとダメね。

メンテ終了

予想以上に時間がかかってしまいましたが、何とか移行が完了しました。

時間が長引いた関係で、昨日はプチプチと切れることが多かったと思います。ご迷惑をおかけしました。

全文を読む

大規模メンテのお知らせ

一旦サーバーを止める必要のある大規模なメンテナンスを行いたいなーと前から思ってはいたのですが・・・。やっぱり、止めるってのは極力避けたいなーと。

そんなこんなでなかなか実行に移せませんでしたが、そろそろやらないとまずい状況になっているので、やります。

2/1o(水)あたりです。時間は午前中のアクセスがあまりなさそうな時間帯にやります。時間は結構かかってしまいそうです。どの程度の時間がかかるかはわかりませんが、夕方までには完了します。

完了次第、通常通りの運用になります。ご迷惑をおかけしますが、よろしくお願いします。それでは。

年末年始のお詫びとJava版の更新について

年末年始は、お騒がせしました。1/7まで、サーバーが利用できない状態になっていました。本当にすみませんでした・・・。

さてさて、Java版アップロードの更新についてです。

巷で、ドラック&ドロップできたらいいよねという話を聞いて、やっつけでつけてみました。(30分ほどでなんとなしに)

左のテキストエリアに、エクスプローラーからファイルをドロップできるようになりました。

これでアクセスが増えるといいね・・・。

Home

検索
フィード
メタ情報

Return to page top