
Ubuntu 14.04 を積極的なスワッピング動作で設定したいと考えています。Linux カーネル 3.14 を使用しています。次のコマンドを使用して swappiness を変更しました。
echo 100 > /proc/sys/vm/swappiness
しかし、ホストの空きメモリがなくなるまで、OS はページをスワップアウトしないようです。OS がアクセスされていないページをスワップ デバイスに積極的にスワップアウトするようにするにはどうすればよいでしょうか。
答え1
RAM を他の用途に使用します。メモリを割り当てているプロセスや、キャッシュを割り当てようとしているディスク IO は、空き領域を確保するためにアイドル ページをスワップに押し出します。swappiness 変数は、システムがアプリケーションを押し出して、代わりにファイルシステム キャッシュに RAM を使用することを優先するようにします。
答え2
なぜそんなことをしたいと思うのですか?
とにかく、それがあなたの望みなら、それが手に入ります:
#include <stdio.h>
#include <sys/sysinfo.h>
fGetMyRAM()
{
FILE* fStream = popen( "head -n1 /proc/meminfo", "r" );
std::ostringstream output;
int iBuffer = 128;
while( !feof( fStream ) && !ferror( fStream ))
{
char cBuffer[iBuffer];
int iBytesRead = fread( cBuffer, 1, iBuffer, fStream );
output.write( cBuffer, iBytesRead );
}
std::string sResult = output.str();
std::string sLabel, sRAM;
std::istringstream iss(sResult);
iss >> sLabel;
iss >> sRAM;
return std::stoi( sRAM );
}
int main()
{
int iMyRAM = fGetMyRAM();
int *pMemoryHog;
while (true)
{
//as malloc alocates largest contiguous memory, keep slicing down.
iMyRam = iMyRam/2;
printf("%d\n", iMyRam);
pMemoryHog = (int *) malloc ((iMyRam)*sizeof(void *));
if (pMemoryHog == 0)
{
printf("Yeah! NO MORE MEMORY!\n");
return 1;
} // end if out of memory
strcpy(pMemoryHog, "42");
} // end while true
free(pMemoryHog);
return 0;
} // end main