テックブログ

サーバにストレスをかけてOut of memoryを観測してみよう

サーバの画像

はじめに

こんにちは、運用チームのM.Iと申します。
今回は、検証環境でstressコマンドを使用して、
Out of memoryを疑似的に起こしてみたときの様子を載せていきます。

Out of Memoryとは?

そもそも、Out of memoryとは何か、についてなんですが、
読んで字のごとく「メモリ不足」です。
よくメモリはデスク・作業する空間に例えられると思います。
作業するのに、デスクのスペースが狭かったりなかったりしたら不便ですよね。
Out of memoryはデスクにスペースがない!というイメージになります。

検証環境でストレスをかけてみる

Out of memoryが発生したときには、「/var/log/messages」や「dmesg」で
プロセスやoomの記述が確認できます。
自分でも確認がしたく、検索したりAIに相談させてもらったりして
「stress」コマンドで試すことができる、というのを知りました。

■試した環境情報
Linuxサーバ
OS:CentOS Stream9

まずコマンドを使えるようにインストールから実施しました。
[root@ホスト名 ~]# yum list installed |grep stress
[root@ホスト名 ~]#
[root@ホスト名 ~]# yum install stress
~インストールの様子は省略~
Installed:
stress-1.0.4-29.el9.x86_64
Complete!
[root@ホスト名 ~]# yum list installed |grep stress
stress.x86_64 1.0.4-29.el9 @epel
[root@ホスト名 ~]#

「free」コマンドの結果を参考に、どのくらいメモリに圧をかけるか決めていきます。
検証サーバのfreeコマンド(オプション-mhltつけてます)は下記のような結果でした。

[root@ホスト名 ~]# free -hmlt
total used free shared buff/cache available
Mem: 764Mi 361Mi 150Mi 6.0Mi 376Mi 403Mi
Low: 764Mi 614Mi 150Mi
High: 0B 0B 0B
Swap: 2.0Gi 0.0Ki 2.0Gi
Total: 2.7Gi 361Mi 2.1Gi

ターミナルを複数開いて、1つでは「tail -f /var/log/messages」を実行して
他ターミナルでstressコマンドを実行してみます。

stress –vm 1 –vm-bytes 1G –vm-hang 0

今回は1GB分圧をかける感じです。
これを複数ターミナル、3画面から実行してみました。
3画面で実行していたうち、1画面に変化が出始めます。

[root@ホスト名 ~]# stress –vm 1 –vm-bytes 1G –vm-hang 0
stress: info: [24733] dispatching hogs: 0 cpu, 0 io, 1 vm, 0 hdd
stress: FAIL: 24733 <– worker 24734 got signal 9
stress: WARN: 24733 now reaping child worker processes
stress: FAIL: 24733 failed run completed in 7s

tail -f /var/log/messagesも色々出てきました!
[root@ホスト名 ~]# tail -f /var/log/messages
Nov 16 06:16:35 ホスト名 kernel: [ 24731] 0 24731 882 32 49152 0 0 stress
Nov 16 06:16:35 ホスト名 kernel: [ 24732] 0 24732 263027 5 2154496 262144 0 stress
Nov 16 06:16:35 ホスト名 kernel: [ 24733] 0 24733 882 32 40960 0 0 stress
Nov 16 06:16:35 ホスト名 kernel: [ 24734] 0 24734 263027 50424 2146304 211744 0 stress
Nov 16 06:16:35 ホスト名 kernel: [ 24735] 0 24735 882 32 45056 0 0 stress
Nov 16 06:16:35 ホスト名 kernel: [ 24736] 0 24736 263027 108032 921600 416 0 stress
Nov 16 06:16:35 ホスト名 kernel: oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/user.slice/user-1001.slice/session-5.scope,task=stress,pid=24734,uid=0
Nov 16 06:16:35 ホスト名 kernel: Out of memory: Killed process 24734 (stress) total-vm:1052108kB, anon-rss:201696kB, file-rss:0kB, shmem-rss:0kB, UID:0 pgtables:2096kB oom_score_adj:0
Nov 16 06:16:35 ホスト名 systemd[1]: session-5.scope: A process of this unit has been killed by the OOM killer.

該当時間の/var/log/messagesを確認してみると、当時のプロセスが出てきています。
kernel: Tasks state (memory values in pages):
kernel: [ pid ] uid tgid total_vm rss pgtables_bytes swapents oom_score_adj name
kernel: [ 492] 0 492 4945 2 57344 224 -1000 auditd
kernel: [ 540] 81 540 2759 64 61440 224 -900 dbus-broker-lau
kernel: [ 541] 81 541 1323 32 49152 96 -900 dbus-broker
kernel: [ 544] 0 544 33743 75 167936 7648 0 firewalld
kernel: [ 547] 0 547 5190 32 77824 288 0 systemd-logind
kernel: [ 548] 0 548 3647 32 61440 224 0 saslauthd
kernel: [ 549] 0 549 3647 32 61440 224 0 saslauthd
kernel: [ 550] 0 550 3647 32 61440 224 0 saslauthd
kernel: [ 551] 0 551 3647 32 61440 224 0 saslauthd
kernel: [ 552] 0 552 3647 32 61440 224 0 saslauthd
kernel: [ 557] 996 557 21229 49 73728 160 0 chronyd
kernel: [ 630] 997 630 628505 40 212992 1248 0 polkitd
kernel: [ 639] 0 639 64973 128 135168 704 0 NetworkManager
kernel: [ 655] 0 655 6204 77 81920 960 0 httpd
kernel: [ 660] 0 660 22660 34 172032 1984 0 php-fpm
kernel: [ 663] 0 663 64580 780 135168 2624 0 tuned
kernel: [ 667] 0 667 98801 413 131072 2528 0 fail2ban-server
kernel: [ 688] 0 688 764 32 45056 32 0 agetty
kernel: [ 693] 0 693 40612 68 94208 352 0 rsyslogd
kernel: [ 700] 0 700 1406 32 53248 32 0 agetty
kernel: [ 747] 48 747 23204 44 172032 2048 0 php-fpm
kernel: [ 748] 48 748 23204 44 172032 2048 0 php-fpm
kernel: [ 749] 48 749 23204 44 172032 2048 0 php-fpm
kernel: [ 750] 48 750 23204 44 172032 2048 0 php-fpm
kernel: [ 754] 48 754 23204 44 172032 2048 0 php-fpm
kernel: [ 764] 48 764 6624 32 81920 1024 0 httpd
kernel: [ 767] 48 767 393951 99 434176 1312 0 httpd
kernel: [ 771] 48 771 361167 35 364544 1216 0 httpd
kernel: [ 773] 48 773 361167 67 368640 1216 0 httpd
kernel: [ 1012] 0 1012 4414 64 77824 448 0 sshd-session
kernel: [ 1016] 1001 1016 5577 32 86016 448 100 systemd
kernel: [ 1018] 1001 1018 26777 69 94208 832 100 (sd-pam)
kernel: [ 1025] 1001 1025 4479 32 77824 576 0 sshd-session
kernel: [ 1026] 1001 1026 1864 32 57344 160 0 bash
kernel: [ 1055] 1001 1055 5424 64 81920 384 0 sudo
kernel: [ 1061] 0 1061 4334 32 77824 320 0 su
kernel: [ 1062] 0 1062 1918 64 53248 160 0 bash
kernel: [ 1231] 0 1231 2162 32 57344 192 0 crond
kernel: [ 1355] 48 1355 361179 64 364544 1199 0 httpd
kernel: [ 12414] 0 12414 20683 32 57344 64 0 irqbalance
kernel: [ 12424] 0 12424 2951 64 57344 288 -1000 sshd
kernel: [ 12433] 0 12433 5511 32 86016 288 -250 systemd-journal
kernel: [ 12446] 0 12446 8941 64 90112 416 -1000 systemd-udevd
kernel: [ 13102] 27 13102 353669 556 360448 16960 0 mariadbd
kernel: [ 24528] 0 24528 4426 64 69632 480 0 sshd-session
kernel: [ 24533] 1001 24533 4491 59 69632 576 0 sshd-session
kernel: [ 24534] 1001 24534 1864 0 49152 160 0 bash
kernel: [ 24563] 1001 24563 5435 64 81920 352 0 sudo
kernel: [ 24567] 0 24567 4346 64 73728 288 0 su
kernel: [ 24568] 0 24568 1891 32 61440 160 0 bash
kernel: [ 24596] 0 24596 4426 64 77824 480 0 sshd-session
kernel: [ 24599] 1001 24599 4491 60 77824 544 0 sshd-session
kernel: [ 24600] 1001 24600 1864 32 53248 160 0 bash
kernel: [ 24628] 1001 24628 5435 32 77824 384 0 sudo
kernel: [ 24633] 0 24633 4346 64 73728 320 0 su
kernel: [ 24634] 0 24634 1891 160 53248 64 0 bash
kernel: [ 24662] 0 24662 4426 96 73728 448 0 sshd-session
kernel: [ 24665] 1001 24665 4491 99 73728 512 0 sshd-session
kernel: [ 24666] 1001 24666 1864 32 53248 160 0 bash
kernel: [ 24694] 1001 24694 5435 32 81920 384 0 sudo
kernel: [ 24698] 0 24698 4346 32 73728 320 0 su
kernel: [ 24699] 0 24699 1891 64 53248 160 0 bash
kernel: [ 24731] 0 24731 882 32 49152 0 0 stress
kernel: [ 24732] 0 24732 263027 5 2154496 262144 0 stress
kernel: [ 24733] 0 24733 882 32 40960 0 0 stress
kernel: [ 24734] 0 24734 263027 50424 2146304 211744 0 stress
kernel: [ 24735] 0 24735 882 32 45056 0 0 stress
kernel: [ 24736] 0 24736 263027 108032 921600 416 0 stress
kernel: oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/user.slice/user-1001.slice/session-5.scope,task=stress,pid=24734,uid=0
kernel: Out of memory: Killed process 24734 (stress) total-vm:1052108kB, anon-rss:201696kB, file-rss:0kB, shmem-rss:0kB, UID:0 pgtables:2096kB oom_score_adj:0
systemd[1]: session-5.scope: A process of this unit has been killed by the OOM killer.

プロセスの様子や「Out of memory」「OOM killer」が確認できました!

まとめ

検証環境でstressコマンドを使用して、
Out of memoryを疑似的に起こしてみたときの様子を紹介しました。
メモリ不足によって、サーバやサービスに影響が出てしまうこともあります。
パラメータ調整など、サーバに関するお悩みは是非ネットアシストにご相談ください!

見てくださりありがとうございました!

echo"Thank you for Watching" |cowsay


この記事をシェアする

  • facebook
  • twitter
  • hatena
  • line
URLとタイトルをコピーする

実績数30,000件!
サーバーやネットワークなど
ITインフラのことならネットアシストへ、
お気軽にご相談ください