リストの添付アップロードは倍のメモリを消費する

SharePointはサーバーの全体管理とweb.configの設定で、アップロードできるファイルの最大条件容量を指定することが出来ます。しかし、比較的大きな値(200MB等)を設定した場合、ライブラリには(時間はかかりますが)アップロードに成功するものの、リストの添付ファイルの場合、設定したしきい値よりかなり少い値(例えば数十MB)でも失敗するケースが頻発します。

この原因は長らく謎でしたが、先日、Microsoftからおそらくこれだろう、という技術情報を頂くことができましたのでご紹介します。

結論から書いてしまうと、これはSharePointの「仕様」のようです。

ファイルがアップロードされると、SharePointはフロントのメモリ上に、一旦そのファイルを展開します。この時、ただメモリにファイルの容量分の「空き」があるだけでは駄目で、「連続したメモリ領域」が必要になります。領域が確保できない場合、OutOfMemoryException が発生しアップロードは失敗します。


[フィールドの種類 “添付ファイル” のコントロールから “添付ファイル” 列の値を取得できませんでした。詳細はログを参照してください。例外メッセージ: 種類 ‘System.OutOfMemoryException’ の例外がスローされました。]

リストアイテムへの添付の場合、もうひとつ、余計な(?)処理が行われます。ファイルの展開が終了した後、SharePointは同じメモリ上で、更にそのファイルのコピー(のような処理)を行うのです。この領域も「連続」している必要があり、従って、50MBのファイルを添付するには、50MB+50MBで100MBの連続領域が必要です。

この仕様から、必然的にメモリ上限の厳しい32bit環境において、この問題が顕著です。Microsoftが推奨する回避策は64bit化ですが…32bit環境からの移行はそう簡単ではありませんし、そもそも64bit環境でもメモリが無尽蔵にある訳でもありません。

根本的には、環境のチューニングと、大容量ファイルのアップロードにSharePointは利用しない、という運用で回避するしかなさそうです。


Author

中村 和彦(シンプレッソ・コンサルティング株式会社 代表)が「ユーザ視点の SharePoint 情報」を発信します。元大手製造業 SharePoint 運用担当。現SharePoint コンサルタント。お仕事のお問い合わせはこちらまでお願いします。当ブログにおける発信内容は個人に帰属し所属組織の公式発信/見解ではありません。
Twitter : @saruhiko
FB : 中村 和彦
MS MVP SharePoint 2009/10-2011/9
MS MVP Office 365 2012/10-

FaceBook Activity