Linux システムでアクティブ化されている多くのスレッドを持つシステムがあります。各スレッドは特定のサイズのバッファーを割り当て、このバッファーがいっぱいになるとファイルに書き込みます。各スレッドには独自のバッファーがあり、そのバッファーを別のファイルに書き込みます。バッファ サイズを比較的大きく (1M サイズ以上) に設定すると、メモリ リークが発生し始めることがわかりました。ただし、バッファーが小さい場合 (約 1K 以下)、これらのメモリ リークは発生しません。
何が原因か分かる人いますか?そしてもっと重要なのは、どうすればこの問題を克服できるでしょうか? 小さいバッファーを使用すると、システムのパフォーマンスに大きな影響を与える可能性があります。
バッファへの書き込み - else if(m_bUseBuffer) { //データ バッファがいっぱいになりました if (m_nBufferSize+pi_nDataLength >= cMaxSizeQLoaderFileBuffer) { hRes = WriteDataToFile(); }
if (SUCCEEDED(hRes))
{
if (m_nBufferSize+pi_nDataLength <= cMaxSizeQLoaderFileBuffer)
{
memcpy(m_sBuffer+m_nBufferSize,pi_pData,pi_nDataLength);
m_nBufferSize += pi_nDataLength;
m_nBufferLinesCounter++;
//need to write buffer to file otherwise next time we write the file will be too large.
if (m_nBufferLinesCounter + m_nQLoaderFileLinesCounter >= m_nQLoaderFileMaxLines)
{
hRes = WriteDataToFile();
}
}
バッファをファイルに書き込んでいます-
hRes = OpenFile();
if (SUCCEEDED(hRes))
{
m_fQLoaderFile.write(m_sBuffer,m_nBufferSize);
m_fQLoaderFile.flush();
m_nBufferSize = 0;
m_nQLoaderFileLinesCounter += m_nBufferLinesCounter;
m_nBufferLinesCounter = 0;
}
type- std::ofstream からの場合