0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

Oracle Cloud Infrastructure (OCI) の Always Free VMで勉強用サーバーを動かしていたところ、プロンプトが動かなくなり何を入力しても反応しなくなった。
しかも、こういうことが初めてではなくそのたびに勉強を中断していた

  • その日の最初はSSH接続はできる
  • 調べ物をしながら触っているといつの間にか反応しなくなる(だいたい1時間くらい?)
  • 数時間放置して戻ってくるとまた動く
  • 切断して別日にもう一度接続すると動く

という現象

さすがに勉強が続かないので今回は、詳しく調査して原因を突き止めることにした

やったこと

  • Linuxログ調査
  • いくつかのサービスの停止

現在、LinuC Lv1-102(Ver10.0)試験の勉強中であるが、
今回の一連の調査は試験勉強としての知識の習得よりも、実務で障害が起きたときの対応練習として意義深い学びだと感じている。
そこで、記事としてまとめることにした


OCI環境について

OCI上で作成しているVMは下記の構成になっている

ユーザー:私用PC
      │
SSH接続
      │
Internet Gateway:OCIのクラウド上に作成済み
      │
VCN:OCIのクラウド上に作成済み
      │
**Compute Instance**:ここにCPU、メモリ、ストレージなどリソースが割り当てられている

このCompute InstanceでImageにはOracle-Linux-9.7-2026.04.30-3を使用しているが、これがCentOSやUbuntuなどのいわゆるLinux OSとほとんど同じものになっている。

ところが、今回の調査でOracle-Linux-9.7-2026.04.30-3には、OCI独自のサービスとして

Oracle Cloud Agent

という管理用エージェントが動いていることがわかった。

無料枠のクラウド利用で小さいリソースしか割り当てられていないのに、Linuxとしての最低限の機能だけでなく

OCI独自サービスがCPU・メモリをさらに消費している

ことが判明した。


障害対応の基本的な考え方

OCIに限らず、障害対応は下記の流れに沿って対応するらしい
それぞれコマンドと出力結果の読み方を習得する必要があるね

現象の整理
↓
ログ確認
↓
リソース確認
↓
サービス確認
↓
仮説
↓
対策
↓
再確認

この流れが重要。


① ログを残せるようにする

まさかの、デフォルトでは再起動前のログが保存されていなかったため、さっそくつまづくことになった。

$ journalctl -b -1
Specifying boot ID or boot offset has no effect, no persistent journal was found.
$
$ ls -ld /var/log/journal
ls: cannot access '/var/log/journal': No such file or directory
$

「前回起動時のログを保存する場所がない」状態。

最初に原因を調べようとしたときは、ここで調査が止まってしまった。このときは、再起動後にプロンプトが応答するようになり、とりあえず問題なくなった。

定期的に動かなくなる現象が続いていたので、次回同じことが起きたときのために、ログを残せる状態に設定変更する必要があった。

journald使用のためのコマンド

sudomkdir-p /var/log/journal
sudo systemd-tmpfiles--create--prefix /var/log/journal
sudo systemctlrestart systemd-journald

上記3つのコマンドの実行後、

journalctl--disk-usage

Archived and active journals take up ...

と表示されればOK


② 起動履歴を見る

journalctl --list-boots

ログが残っていて参照できる起動ログの一覧を出せる

-2
-1
0

と表示された結果、という3回起動した分の履歴をそれぞれ確認できることがわかった

固まった後に再起動した、その前の起動時のログを見たいので、

journalctl -b -1

での結果を見る。
-bオプションが起動ログを呼び出す意味。


③ ログ確認

エラーログ調査

さらに絞り込み、

journalctl -b -1 -p err

でエラーログのみを調べると、

auditd[1510]: Email option is specified but /usr/lib/sendmail doesn't seem executable.
systemd[1]: Failed to start Crash recovery kernel arming.
sshd[4749]: error: kex_exchange_identification: Connection closed by remote host

重大エラー(長時間固まった原因)とは思えない。

SSHサービスの調査

SSH接続がうまくいかなかっただけの可能性があったため、

journalctl -b -1 -u sshd

を実行。すると大量の

Invalid user root
Invalid user ubuntu
Invalid user ansible

などが出ていた。これは世界中からのSSH総当たり攻撃であり、公開サーバでは普通のこと。

自分のログイン

Accepted publickey

だけが正常ログとしてのこっており、そこは成功していたためSSHの問題ではない。大量に失敗のログがあったのでこれが原因かと思ったがこれでもないらしい

時間を指定して調査

実際止まっていた時間に何が起きていたかを確認する。
OCIのGUI上で観れるグラフで明らかにメモリ等の使用率が上がっていた時間帯があったのでそこを見る

journalctl -b -k --since "2026-06-27 6:22" --until "2026-06-27 8:00"

を実施。時間指定にくわえ[-k]オプションでさらにログを絞り込んでいる。sshdなどが含まれると大量に出力されてよくわからなかったため。

結果、下記のログを見つけることができた

kernel:Out of memory Killed process dnf

OOM Killer

これはLinuxが

メモリ足りない!
→何か殺すしかない
→dnf終了

という対応をしたということを意味する。

Out of memoryということで、ここからは**何がメモリを圧迫していたか?**の調査に切り替える


④ メモリ使用量確認コマンド

free -h
ps aux --sort=-%mem | head -20
systemd-cgtop

使用コマンドはこの3つ

free -h

出力結果のうち、

total:498MB
available:295Mi

となっていた(だいたい)。OCIの無料枠、Always Free環境なので少なめ?

このうち295Miのavailable部分が「今すぐ使えるメモリ」。これを何かが使い切ってしまうことで動作停止が起きていると予想できる。

ps aux --sort=-%mem | head -20

ps:Process Status

現在動いているプロセスを表示するコマンド

a:全ユーザー

u:User format 見やすい形式で表示する、ということ

例えば

USER
CPU
MEM
START
COMMAND

などが追加される。

x:端末(TTY)を持たないプロセスも表示

例えば

systemd
sshd
NetworkManager

などのサービスも表示される。

-sort=-%mem

--sort=:並び替え

%mem:メモリ使用率

-:使用率の高い者から降順する

systemd-cgtop

topコマンドはプロセス単位であることに対し、systemdサービス単位で見ることができるコマンド

cgはcgroup、Control Groupsのこと。

CPU何%、メモリ何MBを使っているか、をまとめてみることができる

⑤ メモリ使用量確認結果

ps aux --sort=-%mem | head -20結果:

oracle-+    9727  0.0  4.0 1246908 20852 ?       Sl   11:01   0:10 /usr/libexec/oracle-cloud-agent/plugins/oci-wlp/oci-wlp
oracle-+    9719  0.1  3.8 1241300 19652 ?       Sl   11:01   0:18 /usr/libexec/oracle-cloud-agent/plugins/gomon/gomon
ocarun      9749  0.1  3.8 1244776 19472 ?       Sl   11:01   0:13 /usr/libexec/oracle-cloud-agent/plugins/runcommand/runcommand
oracle-+    9734  0.0  3.1 1241756 16216 ?       Ssl  11:01   0:05 /usr/libexec/oracle-cloud-agent/updater/updater
oracle-+    9679  0.0  2.9 1241744 15176 ?       Ssl  11:01   0:07 /usr/libexec/oracle-cloud-agent/agent
pcp         3318  0.0  1.6  25612  8372 ?        S    09:59   0:10 /usr/libexec/pcp/bin/pmlogger -N -P -d "/var/oled/pcp/pmlogger/LOCALHOSTNAME" -r -T24h10m -c config.ora -v 100mb -m pmlogger_check %Y%m%d.%H.%M

systemd-cgtop結果:

system.slice      152.5M
user.slice         37.0M
oca.slice          91.4M

このあたり??

oca.slice:Oracle Cloud Agent全体

system.slice:PCP関連が多数

⑥注目したサービス

PCP:Performance Co-Pilot

Linux性能監視ソフト

役割は

  • CPU
  • メモリ
  • Load Average
  • Disk
  • Network

などを記録すること。

サービスはpmcd

Oracle Cloud Agent:

  • OCIコンソールで監視できるようにする
  • OCIコンソールからのRun Commandの実行
  • OS Management

コンソールの機能は一部失われるが、LinuCの勉強だけなら停止しても問題ない?

⑦ サービスの停止

試験的に

oracle-cloud-agent
pmcd

を停止した。その結果、free -h結果に少し余裕ができた。

OCIコンソールはCPU・Memoryグラフでも利用率低下が確認できた
(→その後見えなくなった)

つまり今回止めたサービスは実際にリソースを消費していたことが分かった。


今日覚えたコマンド

目的 コマンド
前回起動ログ journalctl -b -1
起動一覧 journalctl --list-boots
エラーのみ journalctl -p err
サービスログ journalctl -u sshd
時間指定 journalctl --since ... --until ...
カーネルログ journalctl -k
メモリ free -h
プロセス順位 ps aux --sort=-%mem
サービス一覧 systemctl list-unit-files
起動中サービス systemctl --type=service --state=running
サービス停止 sudo systemctl stop <サービス名>
サービス状態 systemctl status <サービス名>
cgroup確認 systemd-cgtop

今回の調査結果

今回の調査では、

  • SSHへの大量アクセスは確認できたが、異常ではなく一般的なインターネットスキャンだった。
  • カーネルログにも、操作が固まる直接原因となるような OOM(メモリ不足による強制終了)やディスクエラーは見つからなかった。
  • 一方で、Always Free(約500MBメモリ)の環境に対して、PCPOracle Cloud Agent が比較的大きな割合のメモリを使用していることが分かった。
  • これらを停止すると、free -h や OCIのメトリクス上でもメモリ使用量が減少し、対策が実際にリソースへ影響していることを確認できた。

現時点では「SSHが固まる原因を完全に特定した」とは言えないが、不要な常駐サービスを減らしてリソースに余裕を作るという改善は確認できた。


今日の学び

個人的には、この一連の流れで一番大きかったのは「コマンドを覚えたこと」ではなく、障害対応の進め方を体験できたことだと思う。

  • まず現象を整理する
  • ログで事実を確認する
  • リソースを測定する
  • 仮説を立てる
  • 変更を加える
  • 結果を測定して効果を確認する

このサイクルは、Linuxだけでなくクラウドやネットワーク機器、業務システムの障害対応でも共通する基本的な考え方であり、今日の調査はその練習として非常に実践的な内容だった。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?