出現了好幾次服務器內存耗完導致進程宕機的問題,雖然主要問題是服務器管理不當,但是還是需要一個辦法,在內存耗完了的時候,能自動保存全部數據以後再退出,而不是直接宕機。
解決辦法暫時這樣,在進程啓動的時候預先申請一小塊內存,當機器的內存耗光時,把這一小塊內存釋放出來,給進程保存數據,保存完畢後進程退出。
具體如下:
BYTE* reserveMem=NULL;
void noMemory() //定義自己的new操作失敗處理函數
{
delete reserveMem;
save();
exit(1);
}
void save()
{
//保存數據
}
int main()
{
std::set_new_handler(noMemory);
reserveMem = new BYTE[2*1024*1024];
return 1;
}