nginx + php-fpmを使う上での注意(大きなファイルのダウンロード)

ownCloudはapacheを標準としていて、nginxは「Other Web Servers」の取り扱いです。それでも導入手順は書かれています。

http://doc.owncloud.org/server/5.0/admin_manual/installation/installation_others.html

ただし、この設定だと1GBを超えるファイルをダウンロードできません(クライアントソフトを通してもNG)。
ownCloudだけでなく、PHP自体が1GBを超える出力をできなくなります。
続きを読む

ownCloud試用その後

takekoshiです。
owncloudを社内で使うべく試験導入しました。いくつかの問題がありつつも、今のところは使えなくはないというところです。社内にファイルサーバを置けばいいんですが、地震対策やらを考えるとデータセンターに置ける物はデータセンターに置きたいです。

■使用感
◇容量よりファイル数
全体として、容量よりファイル数がボトルネックになります。(クライアントソフト経由でも)WebDAVですべてを行っているため、容量の大きいものは単に転送量が多いだけですが、1ファイルごとにhttpアクセスが発生、dbへのセッション確立もそのたびに行っている様子です。

◇CPU食い
一番使うサーバリソースはCPUです。一人が同期を始めると、ロードアベレージが1ぐらい上がります。その間、ディスクIOはほとんど発生しません。ファイルサーバなのに意外でした。WebDAVリクエストを処理するためにPHPがCPUを使用しています。
CPUを食いつぶすのはどうにもならないようです( https://wiki.archlinux.org/index.php/Owncloud_(%E6%97%A5%E6%9C%AC%E8%AA%9E) )。
ディスクIOは十分少ないのでssh操作ができなくなる等の問題はなく、ユーザからは「同期中クライアントの数に比例して同期が遅くなる」という負荷のかかりかたです。

◇MySQLも負荷が上がる
PHPが一番負荷が上がりますが、MySQLも負荷が上がります。ただ、重いクエリがあるわけではなく、同期中はhttpd接続のたびに細かい処理を繰り返しているようです。

◇同期が終われば静か
同期中は負荷が高めですが(mysqlもhttpdもブン回ります)、同期が終わってしまえばほとんど負荷はありません。更新有無確認のために、30秒に1回クライアントから接続がやってきます、

◇ファイル共有で人数分のネットワーク帯域を使用
複数人でフォルダ共有する場合、ファイルアップロードする→共有関係者全員がダウンロードする、で人数分のネットワーク帯域を使用します。100Mbpsでも10人で共有すれば一人当たり10Mbpsで、案外と帯域を使います。

◇何らかのタイミングで共有ファイル全部同期し直し
何かのタイミングで共有ファイルをすべて同期しなおす動作が発生します。
・ユーザが所属するグループを変更(追加)する
・共有ディレクトリを増やす
のどちらかで発生しているようです。

■サーバ設定まわり
◇MyISAMになっていた
デフォルトエンジンがMyISAMになっていたせいか、全部MyISAMでした。InnoDBに変更しました。効果のほどはわかりません。

◇一部にバグ
oc_queuedtasks.parametersはvarchar(256)で定義されています。json_encode()でデータが格納されますが、ファイルパスが含まれるため、ファイルパスが長いと256文字に切られる(mysqlデフォルトの場合)ので、json_decode()ができずエラーになります。
次のalter文で回避できます。

ALTER TABLE oc_queuedtasks MODIFY COLUMN parameters longtext NOT NULL

この不具合がどう影響するかまでは調べてません。

◇KeepAliveの効果は不明
KeepAliveのOn/Offは、速度的には大した影響がないようです。

◇apacheでもnginxでも変わらなさそう
最初はapacheで動かしていましたが、nginx + php-fpmに変更しました。負荷の程度は変わらなかったです。
nginxプロセスは静か、php-fpmプロセスが重いので、APサーバとして重くwebサーバとしては関係なしというものと思われます。

◇BASIC認証はかけられない
BASIC認証をかけるとリダイレクトがループしました。仕様のようです。
https://github.com/owncloud/core/issues/107

■ファイル競合
◇競合した場合は、競合ファイルが作られる。
同一ファイルを同時に編集した場合、
aaaaa.txt
に対して
aaaaa_conflict-20131028-144730.txt
がつくられます。先にサーバにUPしたほうが勝ちになり、あとからupしたほうが競合ファイルとしてつくられます。
ただし、編集ではなく削除した場合は削除のほうが勝ちになる様子です。
編集しないでファイルロックを持っている場合(サクラエディタで開きっぱなしなど)、他で編集されると同期エラーが出ます。ローカルファイルの更新が失敗している様子です。

ownCloudを試してみました

takekoshiです。
オンラインストレージにownCloudが良さげということで試してみました。公式サイトを見ると非常に多機能で楽しくなってきます。
ググる限りではdropboxの代わりのような言われ方をしていますが、商用版もあるので共有フォルダに期待できます。ユーザ権限にグループの概念があり、グループ単位でフォルダ共有できます。

続きを読む