• 締切済み

oracleのメモリ使用量が97%ほどに・・・減らしたいです

いつもお世話になります。 oracle8.1.7がインストールされている Linux サーバに関して、現在メモリ使用量が逼迫しているためか、 時々OSの処理が重くなり、応答が無くなる事が多々発生して困っています。 Database:Oracle 8.1.7 Enterprise Edition Linux:RedHat Linux 6.2 freeコマンドで調べたところ、 --------------------------------------------------------------------------- [root@sample dir1]# free total used free shared buffers cached Mem: 2073296 1996752 76544 1575952 112904 813364 -/+ buffers/cache: 1070484 1002812 Swap: 2097136 2536 2094600 --------------------------------------------------------------------------- topコマンドで調べたところ(Shift + M でメモリ使用順としました) --------------------------------------------------------------------------- 6:05pm up 5:06, 2 users, load average: 0.22, 0.11, 0.10 69 processes: 66 sleeping, 1 running, 0 zombie, 2 stopped CPU states: 17.3% user, 1.4% system, 0.0% nice, 81.1% idle Mem: 2073296K av, 1996832K used, 76464K free, 2385012K shrd, 110684K buff Swap: 2097136K av, 2632K used, 2094504K free 816100K cached PID USER PRI NI SIZE RSS SHARE STAT LIB %CPU %MEM TIME COMMAND 1672 oracle 0 0 848M 848M 847M S 604M 0.0 41.9 13:47 oracle 1710 oracle 4 0 458M 458M 456M S 445M 1.5 22.6 13:03 oracle 1767 oracle 6 0 350M 350M 348M S 337M 2.3 17.3 10:17 oracle 1764 oracle 6 0 347M 347M 342M S 331M 2.3 17.1 4:38 oracle 1915 oracle 16 0 84564 82M 80532 S 68M 29.2 4.0 0:59 oracle 1688 oracle 0 0 74804 72M 73592 S 71M 0.0 3.5 0:36 oracle 1677 oracle 0 0 62808 61M 61100 S 46M 0.0 3.0 0:44 oracle 848 oracle 0 0 39160 38M 37960 S 36M 0.0 1.8 0:01 oracle 854 oracle 0 0 30092 29M 29632 S 25M 0.0 1.4 0:01 oracle 852 oracle 0 0 14592 14M 14144 S 9.8M 0.0 0.7 0:02 oracle ---------------------------------------------------------------------------  ※10件のみとしました 上記となり、恐らくoracleがメモリ使用量を圧迫し、Swap領域も逼迫した場合にサーバ処理の 応答が無くなると推測しています。 上記を改善するために、init.ora 内の以下の項目を編集しようと考えていますが、数値を決めかねています。 サーバがフリーズ状態(僅かながらもゆっくり動いている)原因について、 何でも結構ですので、アドバイスいただけたらと思います。よろしくお願いいたします。 open_cursors = 1000 max_enabled_roles = 30 db_block_buffers = 64000 shared_pool_size = 524288000 large_pool_size = 1048576 java_pool_size = 0 log_checkpoint_interval = 10000 log_checkpoint_timeout = 1800 processes = 150 log_buffer = 532480 db_block_size = 8192 sort_area_size = 1048576 sort_area_retained_size = 1048576

  • Oracle
  • 回答数3
  • ありがとう数3

みんなの回答

  • abby14
  • ベストアンサー率0% (0/1)
回答No.3

>上記となり、恐らくoracleがメモリ使用量を圧迫し、Swap領域も逼迫した場合にサーバ処理の 応答が無くなると推測しています。 このような状況になってしまうSQL処理があるのでしょうか? だとしたらそのSQLのチューニングを行うのがベストだと思います。 OSからの監視ツールではなく、oracleの監視ツール(TOPSESSION等) を使用してみてはどうでしょうか。

AkibaFan
質問者

お礼

返信ありがとうございました。 97%となってしまうときもあれば、普段は40%のメモリ使用量で安定 しているときもあります。原因が分からないのが困りものですが・・・。 規模の大きなWebアプリケーションのため、全てを調査となると、もう 本当に不可能に近いくらいの時間がかかってしまいます。 なぜか、このサーバだけ発生するんですよね・・・。 監視ツール Oracle Top Sessions というものがあるのですね。 調べてみたいと思います。ありがとうございました。

  • joih
  • ベストアンサー率35% (37/105)
回答No.2

うーん、スラッシングかも。 何か重たい処理を実行したときに、ディスクとCPUの利用率をグラフにすると、きれいに上下に波うってると思います。 複数インスタンスが稼動してるようですが、DBそのもののメモリ使用量をさげても根本的な解決にはならないきがしますので、 shared_pool_size = 524288000 この値を下げると良いとかは、ちょっといえませんね・・・ メモリ追加か、DBインスタンスを他に移すとかが良いのでは。

AkibaFan
質問者

補足

返信ありがとうございました。 複数インスタンスは起動していないようでした。 3日後に再度同コマンドを実行し、oracle のメモリ使用率を全て合計したところ42.4%程となっており、使用率が下がっていました。にも関わらず、メモリ 2073296K のうち、1985032K のメモリを消費しており・・・謎です。 topコマンドで調べたところ(Shift + M でメモリ使用順としました) --------------------------------------------------------------------------- 9:11pm up 3 days, 8:12, 1 user, load average: 0.95, 0.38, 0.14 62 processes: 60 sleeping, 2 running, 0 zombie, 0 stopped CPU states: 0.0% user, 50.8% system, 0.0% nice, 49.1% idle Mem: 2073296K av, 1985032K used, 88264K free, 907912K shrd, 42668K buff Swap: 2097136K av, 2036K used, 2095100K free 885768K cached PID USER PRI NI SIZE RSS SHARE STAT LIB %CPU %MEM TIME COMMAND 1986 oracle 0 0 510M 510M 509M S 289M 0.0 25.2 5:26 oracle 1688 oracle 0 0 92608 90M 91348 S 79M 0.0 4.4 0:37 oracle 1677 oracle 0 0 86280 84M 84556 S 60M 0.0 4.1 0:48 oracle 848 oracle 0 0 63232 61M 62032 S 60M 0.0 3.0 0:05 oracle 854 oracle 0 0 43048 41M 42580 S 36M 0.0 2.0 0:03 oracle 8062 oracle 0 0 23544 22M 22632 S 8964 0.0 1.1 0:00 oracle 8601 oracle 0 0 20316 19M 19332 S 12M 0.0 0.9 0:02 oracle 852 oracle 0 0 11244 10M 10796 S 9.8M 0.0 0.5 0:27 oracle 867 oracle 0 0 7564 7420 6952 S 3684 0.0 0.3 0:00 oracle 8066 oracle 0 0 7116 7116 6544 S 816 0.0 0.3 0:00 oracle ---------------------------------------------------------------------------  ※10件のみとしました 以下は Shift + M を押下せず、topコマンドをそのまま実行 --------------------------------------------------------------------------- 9:12pm up 3 days, 8:13, 1 user, load average: 1.05, 0.49, 0.19 62 processes: 60 sleeping, 2 running, 0 zombie, 0 stopped CPU states: 0.0% user, 50.8% system, 0.0% nice, 49.1% idle Mem: 2073296K av, 1985060K used, 88236K free, 907912K shrd, 42684K buff Swap: 2097136K av, 2036K used, 2095100K free 885768K cached PID USER PRI NI SIZE RSS SHARE STAT LIB %CPU %MEM TIME COMMAND 648 root 0 0 732 680 580 R 0 99.9 0.0 1172m dpteng 8633 oracle 0 0 868 868 668 R 0 1.7 0.0 0:00 top 1 root 0 0 472 472 400 S 0 0.0 0.0 0:06 init ---------------------------------------------------------------------------  ※3件のみとしました なお、init.oraの編集はしないことにします。 /usr/dpt/dpteng(不明)が99.9%CPUを消費しているのも関係あるかもしれませんが、これも怪しいかも・・・。

  • ishi7474
  • ベストアンサー率32% (71/216)
回答No.1

複数のインスタンスを同時に起動しているということはありませんか。

AkibaFan
質問者

お礼

早速の回答ありがとうございます。 以下を確認したところ、インスタンスは一つのみでしたので、 複数起動していることは無さそうでした。 /var/oracle/app/admin/○○○

関連するQ&A

  • OracleのSGA領域の拡張について

    SGA領域の拡張をしておりますがOS上のメモリーの見方が よく分かりません。 SGAを拡張する前は下記のようになっております。 ●MiracleLinux 2.1 [oracle@svr20 dbs]$ free -m total used free shared buffers cached Mem: 1254 1247 7 233 659 190 -/+ buffers/cache: 397 857 Swap: 2000 0 2000 →見方としては free7M + buffers659M + cached190M = 856M  -/+ buffers/cache:とほぼ同じでだいたい856Mあまっている?  と言う見方でよろしいのでしょうか? ●Oracle9.2.0.1 SQL> startup open; ORACLE instance started. Total System Global Area 235999352 bytes Fixed Size 450680 bytes Variable Size 201326592 bytes Database Buffers 33554432 bytes Redo Buffers 667648 bytes Database mounted. Database opened. →SGAは235Mとなっております。 ------------ ここで alter system set sga_max_size = 1024M scope=spfile; 発行して1024Mに拡張しOracleとOSを再起動しました。 SQL> startup open; ORACLE instance started. Total System Global Area 1074861156 bytes Fixed Size 451684 bytes Variable Size 1040187392 bytes Database Buffers 33554432 bytes Redo Buffers 667648 bytes Database mounted. Database opened. →SGAは1Gとなっており増えております。 [root@svr20 /root]# free -m total used free shared buffers cached Mem: 1254 1212 42 236 668 161 -/+ buffers/cache: 382 872 Swap: 2000 73 1926 →872Mあまっている? 75Mぐらい増やしましたがOS上では減っておりません。 freeは42Mと増えてます。 また、alter system set sga_max_size = 2024M scope=spfile; と拡張しましたら再起動後メモリが足らないのかORA-27123となり起動 できなくなりました。 この場合SGAのメモリ枠は何メガまで拡張できるかどのようにして 判断したら良いか教えてください.

  • freeコマンドの見方を教えてください。

    実行して以下のようになったのですが buffers=25100 cached=255876と -/+ buffers/cacheの列の意味が分かりません。 結果をどのように見ればよいでしょうか? [root@linux mrtg]# free       total used free shared buffers cached Mem: 255876 237760 18116 0 25100 95504 -/+ buffers/cache: 117156 138720 Swap: 522104 68888 453216

  • メモリの使用量について

    メモリの使用量の確認方法について教えてください。 freeコマンドを実行すると以下のように表示され、2GB中1.3GBを使用していることが分かります。 total used free shared buffers cached Mem: 2072828 1358364 714464 0 175372 836028 -/+ buffers/cache:346964 1725864 Swap:2096472 0 2096472 どのプロセスがメモリを消費しているか調べたいと思い、topコマンドを実行後、"M"でメモリの消費量の多い順にプロセスを並べ替えて、使用率の合計を計算してみました。 しかし、その合計値は約20%ほどです。 2GBのメモリを積んでいますので400MBほどしか使用していないことになります。 freeコマンドとtopコマンドでどうしてこんなに大きな差が出ているのでしょうか? また、どちらが正しい値なのでしょうか? ご存知の方がいらっしゃいましたら教えてください。 よろしくお願いいたします。

  • 【メモリ]】vmstat、free、topの表示

    Linux(CentOS)でサーバのメモリ状態を確認するために 以下のコマンドを実行しました。 ・vmstat ・free ・top 【vmstat】 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 140 29812 137284 242088 0 0 0 3 2 0 1 0 96 3 0 【free】 total used free shared buffers cached Mem: 515312 485500 29812 0 137284 242088 -/+ buffers/cache: 106128 409184 Swap: 1052216 140 1052076 【top】 Mem: 515312k total, 485500k used, 29812k free, 137284k buffers Swap: 1052216k total, 140k used, 1052076k free, 242088k cached 各コマンドの表示結果の関連性を教えてください。 1.vmstatコマンドでは「used」項目が表示されないため  メモリの使用量が分からない? 2.「used」項目と「free」項目を足し合わせると、実メモリサイズ(total)と一致する。  「buff(ers)」項目と「cashe(d)」項目は、実メモリの情報?仮想メモリの情報? 3.「buff(ers)」項目と「cashe(d)」とは?また違いは?  #freeコマンドでは、「cashed」項目は「Mem(実メモリ)」列に表示されているが  #topコマンドでは、「Swap(仮想メモリ)」列に表示されている。 4.「-/+ buffers/cache:」列の意味は?  「used」項目と「free」項目を足し合わせると、実メモリサイズ(total)と一致する。  #「Mem」項目の「buffers」項目と「cashed」との違いは? ご教示お願いいたします。 <環境> CentOS(5.5) カーネルバージョン:2.6.18-194.11.3.el5 実メモリ:512MB スワップ領域:1024MB procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 140 29812 137260 242080 0 0 0 3 2 0 1 0 96 3 0 top - 17:00:00 up 125 days, 16:04, 1 user, load average: 0.05, 0.05, 0.02 Tasks: 107 total, 1 running, 106 sleeping, 0 stopped, 0 zombie Cpu(s): 0.2%us, 0.2%sy, 0.4%ni, 96.2%id, 3.1%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 515312k total, 485500k used, 29812k free, 137260k buffers Swap: 1052216k total, 140k used, 1052076k free, 242080k cached

  • Linux系OSのメモリの解放について

    お世話になります。 CentOS6.4を使ってPHPアプリを動かしています。 結構メモリを消費するアプリなので、 使っているうちにOutOfMemoryになることがあります。 ※正常終了する場合もあります。 正常に終了しようがOutOfMemoryになろうが、 大量にメモリを確保した後は、そのまま解放されていないように見えます。 例えば、freeコマンドで見たときにに usedが減りません。 【例】 アプリケーション実行前 # apachectl restart # free total used free shared buffers cached Mem: 16334660 472788 15861872 0 105700 120124 -/+ buffers/cache: 246964 16087696 Swap: 2047992 0 2047992 ここでアプリケーション実行し正常に終了。 # free total used free shared buffers cached Mem: 16334660 1754276 14580384 0 106836 120484 -/+ buffers/cache: 1526956 14807704 Swap: 2047992 0 2047992 apacheを再起動すればusedは減るのですが、 他にusedになっているメモリを開放する方法はあるのでしょうか? また、どのようなメカニズムで解放されないのか教えていただけるとありがたいです。 よろしくお願いします。

  • サーバーのメモリーの状態

    redhat linux 6.2 のサーバーで、特にアクセスはない状態として、 メモリーの状態を調べると、(free -m) total used free shared buffers cached Mem: 250 247 3 24 194 35 -/+ buffers/cache: 17 233 Swap: 517 0 517 と表示されます。 メモリーの使われている量が多すぎるような気がするのですが、これは、正常な値でしょうか。 (とくに、バッファーという所が、192Mも使われています。これは、正常な値でしょうか。そもそも、バッファーというのは、何を表しているのでしょうか。)

  • サーバのメモリについて

    現在、CentOS5にてサーバを運用しています。 昨日から、ホスティング業者より、残メモリが少ない旨のメールが届くようになりました。 そこで、メモリを確認したところ以下のような状態でした。 #free -m total used free shared buffers cached Mem: 8118 5721 2397 0 372 4811 -/+ buffers/cache: 537 7580 Swap: 2047 0 2047 linuxはメモリに空きができると、バッファやキャッシュに割り当て、 そのバッファやキャッシュも空きメモリとして計算できるようですので、 上記のような場合ですと、7.5Gくらい空きがあるということになり、 問題ないと考えて大丈夫でしょうか。 また、バッファやキャッシュで確保しているメモリを解放する方法はありますでしょうか。

  • サーバのメモリ増設をするのですが・・・

    サーバのメモリ512M×2が常に使用量が多いようなので 1G×2に増設しようと思っています。 total used free shared buffers cached Mem: 1035464 1022208 13256 0 8604 911120 -/+ buffers/cache: 102484 932980 Swap: 2031608 864 2030744 そのメモリはPC3200 DDR 400のものです。 購入後一応memtestを走らせたいのですが、 サーバをできるだけ止めたくないのでPC2700まで使える 別のデスクトップのパソコンで確認することはできるでしょうか? 一応動くならデスクトップのパソコンで確認したいです。

  • サーバ状況の見方と対策方法をどうすべきか?

    CentOS 4を導入してMySQLのインデックスを作っていますが、 サーバが動かなくなってしまい、どうしたらいいか困っています。 メモリを足すだけでよいのか? CPUを上げた方がよいのか? ハードディスクを取り替えた方がよいのか? どう見て、どう動けばよいのでしょうか? よろしくお願いします。 # vmstat 1 10 procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu---- r b swpd free buff cache si so bi bo in cs us sy id wa 0 2 241628 872 1144 487020 19 8 1852 1270 5 1 12 2 45 41 0 1 241628 1616 1140 486428 0 0 3680 7084 1223 249 4 2 0 94 0 2 241628 2144 1140 485868 0 0 588 0 1153 315 6 0 0 94 0 1 241628 1936 1140 486120 0 0 556 0 1145 291 6 1 0 93 0 2 241628 1512 1108 486584 0 0 1192 0 1177 149 5 1 0 94 1 0 241628 2580 1084 485492 0 0 1332 2684 1205 247 3 4 0 93 0 2 241628 1656 1076 486400 0 0 1564 0 1191 153 4 1 0 95 0 2 241628 1128 1076 486920 0 0 1828 24 1214 95 0 1 0 99 0 2 241628 1256 1056 486856 0 0 1048 0 1176 176 3 1 0 96 0 2 241628 808 1052 487304 0 0 3764 0 1206 252 4 1 0 95 # top top - 11:52:27 up 9 days, 3:07, 1 user, load average: 1.83, 1.69, 1.66 Tasks: 49 total, 2 running, 47 sleeping, 0 stopped, 0 zombie Cpu(s): 0.7% us, 0.3% sy, 0.0% ni, 0.0% id, 98.0% wa, 1.0% hi, 0.0% si Mem: 507484k total, 506012k used, 1472k free, 1456k buffers Swap: 1052248k total, 241644k used, 810604k free, 485980k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 21899 mysql 15 0 1257m 332m 332m S 1.3 67.2 243:22.41 mysqld 1 root 16 0 3252 88 68 S 0.0 0.0 0:01.17 init 2 root 34 19 0 0 0 S 0.0 0.0 0:00.13 ksoftirqd/0 3 root 5 -10 0 0 0 S 0.0 0.0 0:00.04 events/0 4 root 5 -10 0 0 0 S 0.0 0.0 0:00.00 khelper 5 root 15 -10 0 0 0 S 0.0 0.0 0:00.00 kacpid 20 root 5 -10 0 0 0 S 0.0 0.0 0:00.00 kblockd/0 41 root 13 -10 0 0 0 S 0.0 0.0 0:00.00 aio/0 21 root 15 0 0 0 0 S 0.0 0.0 0:00.00 khubd 40 root 15 0 0 0 0 S 0.0 0.0 12:31.75 kswapd0 188 root 25 0 0 0 0 S 0.0 0.0 0:00.00 kseriod 296 root 15 0 0 0 0 D 0.0 0.0 2:40.01 kjournald # free total used free shared buffers cached Mem: 507484 505440 2044 0 1372 485748 -/+ buffers/cache: 18320 489164 Swap: 1052248 241640 810608

  • linuxサーバで使用しているメモリの確認方法

    linuxサーバの使用しているメモリの確認方法について教えて頂きたいです。 たとえば以下のようなメモリ表示だった場合に 実際に使用可能なメモリは free+の148588(厳密ではないかもですが)かとおもいます。 total used free shared buffers cached Mem: 192572 190944 1628 54912 20112 126848 -/+ buffers/cache: 43984 148588 Swap: 96384 0 96384 気にしているのはused- の43984 の数字ですが こちらはtotalからfree+を引いた数値ですが、この数字が linux起動から徐々に増え続けています。 この used- ですが、こちらは実際に使用しているメモリという認識でよいでしょうか。 となると、徐々に増え続けているとそのうち枯渇するのではと思いました。 因みにこのサーバではApacheとSendmailが起動してはおりますが 実際に外部等に公開しているわけでもなくただ検証用として起動しており 特にメールが流通するでもなく、Apacheもなにもアクセスない状態です。 このまま同様の設定で本番稼働等をすると同じような現象が発生してしまうのではないかと 気にしております。 徐々に上昇してしまう原因として考えられることがあれば教授いただけますでしょうか。 因みにOSはCentOS 5です。