apache/mod_mono を使用して、Linux ボックスに ServiceStack RESTful Web サービスがあります。
public DataSetResponse Get(DataRequest req)
{
DataSetResponse Response = new DataSetResponse();
DataSet BigData = new DataSet();
this.Status = this.DataFetcher(ref BigData);
Response.Data = BigData;
Response.Status = this.Status;
System.Threading.Thread.Sleep(30000);
return Response;
}
スレッドがスリープ状態になると、top によって報告されているように、mono がメモリの 8% にあることがわかります。30 秒以上後に mono の CPU アクティビティが再び発生すると、メモリが 90% まで上昇し、メモリ不足の例外がスローされます。Mono は引き続き実行されますが、メモリは解放されません。
小さなデータセット (サイズの 1/10) では問題なく動作するようで、mono のメモリは 1% です。クライアントにストリーミングされる前に、データオブジェクトがJsonにシリアル化されると、メモリの増加が発生すると思います。
これは正しいです?さらに重要なことに、これをどのように解決できますか?