プロが教えるわが家の防犯対策術!

以下のタイプのサーバーを使用しています。

マシンタイプ:x225
カーネル: 2.4.20-28.7smp
OS:Red Hat Linux 7.3 2.96-126))
DB:MySQL

2004年に導入したサーバーですが、カーネルパニックが度々発生しています。

MySQLを使用したあるシステムを導入しているのですが、
そのシステムの販売元のメーカーに問い合わせたところ、
「メモリ不足によりスラッシング状態となりカーネルパニックが発生したのでは?」
との回答をもらいました。

とりあえずの対応としてメモリを増設しましたが、
どの程度までメモリ不足に耐えられるのか検証したいと思います。

そこで、実行に大容量のメモリが必要なシェルを作成しようと考えました。
私が思いついたのは、以下の2種類のタイプのシェルです。
(1)大容量の圧縮ファイルを解凍し、圧縮する動作を繰り返すシェル
(2)mysqldumpを繰り返すシェル

上記2つの方法以外に効率良くメモリを消費する方法はありますでしょうか?
どなたかお教えください。よろしくお願いします。

A 回答 (4件)

>Linux の場合 calloc (や malloc) で確保するだけでは不十分で


callocはNULLクリアする(つまりアクセスする)ため問題ないです。

>今どき malloc.h ではなく stdlib.h
ヘッダの流行までは知りませんが、
目的が達成できればヘッダは何でもかまわないと思います。
    • good
    • 0

calloc の仕様を失念していました. 御指摘感謝します>#3.


ちなみに malloc.h/stdlib.h については「今さら標準にないものを使うわなくてもよいのでは」というくらいの気持ちで.
というだけではアレなのでちょっとコメントですが, おそらく質問者さんの 1 の方法でメモリ不足という状況を作るのは無理だと思います. もちろん, 圧縮や解凍に使うプログラムにもよりますが.
    • good
    • 0

えっと....


シェルスクリプトじゃないとダメ?
「malloc + memset + sleep」というプログラムを C で組んだ方が楽な気がするんだけど.
あ, Linux の場合 calloc (や malloc) で確保するだけでは不十分で, そこで確保した領域に実際にアクセスしないといけないんじゃないかなぁ>#1. ついでにいえば今どき malloc.h ではなく stdlib.h.
    • good
    • 0

1.増設したメモリを減らす


2.メモリ消費プログラムをサクッっとコンパイルして実行すればいいかと。

たとえば、mem.c

#include <stdio.h>
#include <malloc.h>
int main(){
char* buf;
for(;;){
buf = (char*)calloc(1024,1024*100);//100Mbyte取得。ここは適当な大きさで。細かいほうがメモリをより圧迫できる
if(buf == NULL){
printf("calloc failed\n");
}
}
}


gcc -o mem mem.c
でコンパイルして実行

vmstat 1
でメモリ監視
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!