ノート:

Oracle Linuxでのラン・コントロール・グループ・バージョン2

イントロダクション

制御グループ(cgroups)は、実行中のプロセスのためのCPU時間、メモリー、ネットワーク帯域幅などのリソースを制限、優先順位付け、および割り当てするための Linuxカーネル機能です。

このチュートリアルでは、cgroups v2を使用したユーザー・プロセスのCPU時間の制限について説明します。

目的

この演習では、次のことを学習します。

前提条件

演習環境の設定

ノート:無料の演習環境を使用する場合は、接続やその他の使用方法の手順について、Oracle Linuxの演習の基本を参照してください。

演習を開始する前に、いくつかのハウスキーピング項目を完了する必要があります。作成された項目は、cgroupの制限機能をデモンストレーションするために使用されます。

ロード生成スクリプトの作成

  1. まだ接続されていない場合は、端末を開き、sshを介してol8-serverシステムに接続します。

    ssh oracle@<ip_address_of_ol8-server>
    
  2. foo.exeスクリプトを作成します。

    echo '#!/bin/bash
    
    /usr/bin/sha1sum /dev/zero' > foo.exe
    
  3. foo.exeスクリプトを$PATH内の場所にコピーし、適切な権限を設定します。

    sudo mv foo.exe /usr/local/bin/foo.exe
    sudo chown root:root /usr/local/bin/foo.exe
    sudo chmod 755 /usr/local/bin/foo.exe
    

    ノート: (オプション) SELinux enforcingで実行している場合:

    sudo sestatus
    

    次のコマンドを実行して、権限をコピーして変更した後、SELinuxラベルを修正します。

    sudo /sbin/restorecon -v /usr/local/bin/foo.exe
    

ロード生成サービスを作成

  1. foo.serviceファイルを作成します。

    echo '[Unit]
    Description=the foo service
    After=network.target
    
    [Service]
    ExecStart=/usr/local/bin/foo.exe
    
    [Install]
    WantedBy=multi-user.target' > foo.service
    
  2. foo.serviceスクリプトをsystemdスクリプトの場所にコピーし、適切な権限を設定します。

    sudo mv foo.service /etc/systemd/system/foo.service
    sudo chown root:root /etc/systemd/system/foo.service
    sudo chmod 644 /etc/systemd/system/foo.service
    

    ノート: (オプション) SELinux enforcingで実行する場合は、次のコマンドを実行して、権限をコピーして変更した後、SELinuxラベルを修正します。

    sudo /sbin/restorecon -v /etc/systemd/system/foo.service
    
  3. デーモンを再ロードすると、systemdが新しいサービスを認識します。

    sudo systemctl daemon-reload
    
  4. foo.serviceを起動し、ステータスを確認します。

    sudo systemctl start foo.service
    sudo systemctl status foo.service
    

ユーザーの作成

追加のユーザーは、これらの異なるアカウントおよび異なるCPU重みでロード生成スクリプトを実行できます。

  1. ユーザーを作成し、パスワードを設定します。

    sudo useradd -u 8000 ralph
    sudo useradd -u 8001 alice
    echo "ralph:oracle" | sudo chpasswd
    echo "alice:oracle" | sudo chpasswd
    
  2. SSH接続を許可します。

    oracleユーザー・アカウントからSSHキーをコピーします。

    sudo mkdir /home/ralph/.ssh
    sudo cp /home/oracle/.ssh/authorized_keys /home/ralph/.ssh/authorized_keys
    sudo chown -R ralph:ralph /home/ralph/.ssh
    sudo chmod 700 /home/ralph/.ssh
    sudo chmod 600 /home/ralph/.ssh/authorized_keys
    
  3. aliceユーザーに対して繰り返します。

    sudo mkdir /home/alice/.ssh
    sudo cp /home/oracle/.ssh/authorized_keys /home/alice/.ssh/authorized_keys
    sudo chown -R alice:alice /home/alice/.ssh
    sudo chmod 700 /home/alice/.ssh
    sudo chmod 600 /home/alice/.ssh/authorized_keys
    
  4. 新しい端末を開き、両方のSSH接続が機能することを確認します。

    ssh ralph@<ip_address_of_ol8-server>
    

    次に、セッションをexitし、次のユーザーに対して繰り返します。

    ssh alice@<ip_address_of_ol8-server>
    

    セッションを終了し、ターミナル・ウィンドウを閉じます。

cgroups v2をマウントします

Oracle Linuxは、起動時にデフォルトでcgroup v1をマウントします。cgroups v2を使用するには、ブート・カーネル・パラメータを手動で構成する必要があります。

  1. oracleとしてログインしている端末に戻ります。

  2. cgroups v2 systemdカーネル・パラメータを追加します。

    sudo grubby --update-kernel=ALL --args="systemd.unified_cgroup_hierarchy=1"
    

    かわりに、sudo grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="systemd.unified_cgroup_hierarchy=1"を実行して現在のブート・エントリのみを指定できます。

  3. リブートします。

    sudo reboot
    

    リブートが完了するまでに数分かかります。

    ノート:再起動が完了し、sshdデーモンが実行されるまで、システムにsshすることはできません。

  4. sshを使用してol8-serverシステムに接続します。

    ssh oracle@<ip_address_of_ol8-server>
    
  5. cgroups v2がマウントされたことを確認します。

    sudo mount -l | grep cgroup
    

    出力例:

    cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime,seclabel,nsdelegate)
    
  6. cgroupsによってマウントされたディレクトリの内容を調べます。

    ll /sys/fs/cgroup
    

    出力例:

    total 0
    -r--r--r--.  1 root root 0 Mar 13 21:20 cgroup.controllers
    -rw-r--r--.  1 root root 0 Mar 13 21:20 cgroup.max.depth
    -rw-r--r--.  1 root root 0 Mar 13 21:20 cgroup.max.descendants
    -rw-r--r--.  1 root root 0 Mar 13 21:20 cgroup.procs
    -r--r--r--.  1 root root 0 Mar 13 21:20 cgroup.stat
    -rw-r--r--.  1 root root 0 Mar 13 21:20 cgroup.subtree_control
    -rw-r--r--.  1 root root 0 Mar 13 21:20 cgroup.threads
    -rw-r--r--.  1 root root 0 Mar 13 21:20 cpu.pressure
    -r--r--r--.  1 root root 0 Mar 13 21:20 cpuset.cpus.effective
    -r--r--r--.  1 root root 0 Mar 13 21:20 cpuset.mems.effective
    drwxr-xr-x.  2 root root 0 Mar 13 21:20 init.scope
    -rw-r--r--.  1 root root 0 Mar 13 21:20 io.pressure
    -rw-r--r--.  1 root root 0 Mar 13 21:20 memory.pressure
    drwxr-xr-x. 87 root root 0 Mar 13 21:20 system.slice
    drwxr-xr-x.  4 root root 0 Mar 13 21:24 user.slice
    

    出力には、root制御グループがデフォルトの場所に表示されます。このディレクトリには、cgroupという接頭辞が付いたインタフェース・ファイルと、.scopeおよび.sliceで終わるsystemdに関連するディレクトリが含まれます。

仮想ファイル・システムの操作

開始する前に、/sys/fs/cgroupにマウントされたcgroups仮想ファイル・システムについて少し学習する必要があります。

  1. すべてのユーザのCPUに参加するCPUを表示します。

    cat /sys/fs/cgroup/cpuset.cpus.effective
    

    出力例:

    [oracle@ol8-server ~]$ cat /sys/fs/cgroup/cpuset.cpus.effective
    0-1
    

    テスト・ボックスは、デュアルコア・システムであるVM.Standard2.1シェイプにデプロイされたOracle Linux 8インスタンスです。

  2. アクティブなコントローラを表示します。

    cat /sys/fs/cgroup/cgroup.controllers
    

    出力例:

    [oracle@ol8-server ~]$ cat /sys/fs/cgroup/cgroup.controllers
    cpuset cpu io memory pids rdma
    

    この演習の後半で使用するため、CPUコントローラの存在を確認することをお薦めします。

  3. oracleによって生成されたプロセスを表示します。

    最初に、oracleのユーザーID (UID)を決定する必要があります。

    who
    id
    

    出力例:

    [oracle@ol8-server ~]$ who
    oracle   pts/0        2022-03-13 21:23 (10.39.209.157)
    [oracle@ol8-server ~]$ id
    uid=1001(oracle) gid=1001(oracle) groups=1001(oracle),10(wheel) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
    

    UIDを使用すると、oracleユーザー・スライスを見つけることができます。

    cd /sys/fs/cgroup/user.slice
    ls
    

    出力例:

    [oracle@ol8-server ~]$ cd /sys/fs/cgroup/user.slice
    [oracle@ol8-server user.slice]$ ls
    cgroup.controllers      cgroup.subtree_control  memory.events        memory.pressure      pids.max
    cgroup.events           cgroup.threads          memory.events.local  memory.stat          user-0.slice
    cgroup.freeze           cgroup.type             memory.high          memory.swap.current  user-1001.slice
    cgroup.max.depth        cpu.pressure            memory.low           memory.swap.events   user-989.slice
    cgroup.max.descendants  cpu.stat                memory.max           memory.swap.max
    cgroup.procs            io.pressure             memory.min           pids.current
    cgroup.stat             memory.current          memory.oom.group     pids.events
    

    Systemdは、すべてのユーザーにuser-<UID>.sliceという名前のスライスを割り当てます。そのため、そのディレクトリの下には何がありますか。

    cd user-1001.slice
    ls
    

    出力例:

    [oracle@ol8-server user.slice]$ cd user-1001.slice/
    [oracle@ol8-server user-1001.slice]$ ls
    cgroup.controllers  cgroup.max.descendants  cgroup.threads  io.pressure        user-runtime-dir@1001.service
    cgroup.events       cgroup.procs            cgroup.type     memory.pressure
    cgroup.freeze       cgroup.stat             cpu.pressure    session-3.scope
    cgroup.max.depth    cgroup.subtree_control  cpu.stat        user@1001.service
    

    これらは、oracleユーザーの最上位レベルのcgroupです。ただし、cgroup.procsにはプロセスはリストされていません。ユーザー・プロセスのリストはどこにありますか。

    cat cgroup.procs
    

    出力例:

    [oracle@ol8-server user-1001.slice]$ cat cgroup.procs
    [oracle@ol8-server user-1001.slice]$
    

    oracleがこの演習の最初にSSHセッションを開いたときに、ユーザー・セッションでスコープ・サブユニットが作成されました。このスコープでは、cgroup.procsで、そのセッションで生成されたプロセスのリストを確認できます。

    ノート:システムへの接続数に基づいてユーザーが複数のセッションを持つ場合があります。そのため、必要に応じて、サンプル内の3を置き換えます。

    cd session-3.scope
    ls
    cat cgroup.procs
    

    出力例:

    [oracle@ol8-server user-1001.slice]$ cd session-3.scope/
    [oracle@ol8-server session-3.scope]$ ls
    cgroup.controllers  cgroup.max.depth        cgroup.stat             cgroup.type   io.pressure
    cgroup.events       cgroup.max.descendants  cgroup.subtree_control  cpu.pressure  memory.pressure
    cgroup.freeze       cgroup.procs            cgroup.threads          cpu.stat
    [oracle@ol8-server session-3.scope]$ cat cgroup.procs
    3189
    3200
    3201
    54217
    

    これで、プロセスが困難であることがわかったので、systemd-cglsを使用して、ツリーのようなビューで同じ情報を表示できます。

    ノート:仮想ファイルシステム内から実行する場合、systemd-cglsはcgroup出力を現在の作業ディレクトリに制限します。

    cd /sys/fs/cgroup/user.slice/user-1001.slice
    systemd-cgls
    

    出力例:

    [oracle@ol8-server user-1001.slice]$ systemd-cgls
    Working directory /sys/fs/cgroup/user.slice/user-1001.slice:
    ├─session-3.scope
    │ ├─ 3189 sshd: oracle [priv]
    │ ├─ 3200 sshd: oracle@pts/0
    │ ├─ 3201 -bash
    │ ├─55486 systemd-cgls
    │ └─55487 less
    └─user@1001.service
      └─init.scope
        ├─3193 /usr/lib/systemd/systemd --user
        └─3195 (sd-pam)
    

使用中のCPUコアの制限

cgroups v2では、systemdはcpusetコントローラを完全に制御します。このレベルの制御により、管理者は特定のCPUコアでのみ作業をスケジュールできます。

  1. CPUでuser.sliceを確認します。

    cd /sys/fs/cgroup/user.slice
    ls
    cat ../cpuset.cpus.effective
    

    出力例:

    [oracle@ol8-server cgroup]$ cd /sys/fs/cgroup/user.slice/
    [oracle@ol8-server user.slice]$ ls
    cgroup.controllers      cgroup.subtree_control  memory.events        memory.pressure      pids.max
    cgroup.events           cgroup.threads          memory.events.local  memory.stat          user-0.slice
    cgroup.freeze           cgroup.type             memory.high          memory.swap.current  user-1001.slice
    cgroup.max.depth        cpu.pressure            memory.low           memory.swap.events   user-989.slice
    cgroup.max.descendants  cpu.stat                memory.max           memory.swap.max
    cgroup.procs            io.pressure             memory.min           pids.current
    cgroup.stat             memory.current          memory.oom.group     pids.events
    [oracle@ol8-server user.slice]$ cat ../cpuset.cpus.effective
    0-1
    

    cpuset.cpus.effectiveは、user.sliceによって使用される実際のコアを示しています。特定のcgroupディレクトリ内にパラメータが存在しない場合、または設定しない場合、値は親から継承されます。この場合も最上位レベルのcgroupルートディレクトリになります。

  2. systemおよびユーザー0、1001、および989スライスをCPUコア0に制限します。

    cat /sys/fs/cgroup/system.slice/cpuset.cpus.effective
    sudo systemctl set-property system.slice AllowedCPUs=0
    cat /sys/fs/cgroup/system.slice/cpuset.cpus.effective
    

    出力例:

    [oracle@ol8-server user.slice]$ cat /sys/fs/cgroup/system.slice/cpuset.cpus.effective
    cat: /sys/fs/cgroup/system.slice/cpuset.cpus.effective: No such file or directory
    [oracle@ol8-server user.slice]$ sudo systemctl set-property system.slice AllowedCPUs=0
    [oracle@ol8-server user.slice]$ cat /sys/fs/cgroup/system.slice/cpuset.cpus.effective
    0
    

    ノート: No such file or directoryは、デフォルトでsystemスライスが親からcpuset.cpus.effective値を継承することを示します。

    sudo systemctl set-property user-0.slice AllowedCPUs=0
    sudo systemctl set-property user-1001.slice AllowedCPUs=0
    sudo systemctl set-property user-989.slice AllowedCPUs=0
    
  3. ralphユーザーをCPUコア1に制限します。

    sudo systemctl set-property user-8000.slice AllowedCPUs=1
    cat /sys/fs/cgroup/user.slice/user-8000.slice/cpuset.cpus.effective
    

    出力例:

    [oracle@ol8-server ~]$ sudo systemctl set-property user-8000.slice AllowedCPUs=1
    [oracle@ol8-server ~]$ cat /sys/fs/cgroup/user.slice/user-8000.slice/cpuset.cpus.effective
    1
    
  4. 新しいターミナルを開き、ralphとしてsshを介してol8-serverシステムに接続します。

    ssh ralph@<ip_address_of_ol8-server>
    
  5. foo.exeスクリプトを使用してテストします。

    foo.exe &
    

    結果を確認します。

    top
    

    topが実行されると、1 keyを押してCPUを個別に表示します。

    出力例:

    top - 18:23:55 up 21:03,  2 users,  load average: 1.03, 1.07, 1.02
    Tasks: 155 total,   2 running, 153 sleeping,   0 stopped,   0 zombie
    %Cpu0  :  6.6 us,  7.0 sy,  0.0 ni, 84.8 id,  0.0 wa,  0.3 hi,  0.3 si,  1.0 st
    %Cpu1  : 93.0 us,  6.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.7 hi,  0.3 si,  0.0 st
    MiB Mem :  14707.8 total,  13649.1 free,    412.1 used,    646.6 buff/cache
    MiB Swap:   4096.0 total,   4096.0 free,      0.0 used.  13993.0 avail Mem
    
       PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
    226888 ralph     20   0  228492   1808   1520 R  99.7   0.0 199:34.27 sha1sum
    269233 root      20   0  223724   6388   1952 S   1.3   0.0   0:00.04 pidstat
       1407 root      20   0  439016  41116  39196 S   0.3   0.3   0:17.81 sssd_nss
       1935 root      20   0  236032   3656   3156 S   0.3   0.0   0:34.34 OSWatcher
       2544 root      20   0  401900  40292   9736 S   0.3   0.3   0:10.62 ruby
          1 root      20   0  388548  14716   9508 S   0.0   0.1   0:21.21 systemd
    ...
    

    qと入力して最上位を終了します。

  6. プロセスを実行しているプロセッサをチェックする別の方法。

    ps -eo pid,psr,user,cmd | grep ralph
    

    出力例:

    [ralph@ol8-server ~]$ ps -eo pid,psr,user,cmd | grep ralph
     226715   1 root     sshd: ralph [priv]
     226719   1 ralph    /usr/lib/systemd/systemd --user
     226722   1 ralph    (sd-pam)
     226727   1 ralph    sshd: ralph@pts/2
     226728   1 ralph    -bash
     226887   1 ralph    /bin/bash /usr/local/bin/foo.exe
     226888   1 ralph    /usr/bin/sha1sum /dev/zero
     269732   1 ralph    ps -eo pid,psr,user,cmd
     269733   1 ralph    grep --color=auto ralph
    

    psr列は、cmdのCPU番号または実際のプロセスです。

  7. 終了して、ralphとしてログインするために使用する端末ウィンドウを閉じます。

  8. foo.exeジョブを終了します。

    oracleとしてログインしている端末に切り替えて、次のコマンドを実行します。

    sudo pkill sha1sum
    

ユーザーのCPU重量の調整

aliceを楽しむ時間。彼女は完了すべき重要な作業をいくつか持っているので、CPUの2倍の優先順位を彼女に与えます。

  1. aliceralphと同じCPUに割り当てます。

    sudo systemctl set-property user-8001.slice AllowedCPUs=1
    cat /sys/fs/cgroup/user.slice/user-8001.slice/cpuset.cpus.effective
    
  2. CPUWeightを設定します。

    sudo systemctl set-property user-8001.slice CPUWeight=200
    cat /sys/fs/cgroup/user.slice/user-8001.slice/cpu.weight
    

    デフォルトの重みは100であるため、200はその数値の2倍です。

  3. 新しいターミナルを開き、ralphとしてsshを介してol8-serverシステムに接続します。

    ssh ralph@<ip_address_of_ol8-server>
    
  4. ralphとしてfoo.exeを実行します。

    foo.exe &
    
  5. 別の新しい端末を開き、aliceとしてsshを介してol8-serverシステムに接続します。

    ssh alice@<ip_address_of_ol8-server>
    
  6. aliceとしてfoo.exeを実行します。

    foo.exe &
    
  7. topを介して、aliceの優先順位が高いことを確認します。

    top
    

    トップが稼働したら、1 keyを押してCPUを個別に表示します。

    出力例:

    top - 20:10:55 up 25 min,  3 users,  load average: 1.29, 0.46, 0.20
    Tasks: 164 total,   3 running, 161 sleeping,   0 stopped,   0 zombie
    %Cpu0  :  0.0 us,  0.0 sy,  0.0 ni, 96.5 id,  0.0 wa,  0.0 hi,  3.2 si,  0.3 st
    %Cpu1  : 92.4 us,  7.6 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    MiB Mem :  15715.8 total,  14744.6 free,    438.5 used,    532.7 buff/cache
    MiB Swap:   4096.0 total,   4096.0 free,      0.0 used.  15001.1 avail Mem 
    
        PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND  
       7934 alice     20   0   15800   1768   1476 R  67.0   0.0   0:36.15 sha1sum  
       7814 ralph     20   0   15800   1880   1592 R  33.3   0.0   0:34.60 sha1sum  
          1 root      20   0  388476  14440   9296 S   0.0   0.1   0:02.22 systemd  
          2 root      20   0       0      0      0 S   0.0   0.0   0:00.00 kthreadd
    ...
    
  8. oracleユーザーとしてログインした端末に戻ります。

  9. foo.serviceを使用してsystem.sliceをロードします。

    sudo systemctl start foo.service
    

    次に、alice端末ウィンドウで実行中の最上位の出力を確認します。ユーザーが重みに基づいてCPU 1を分割している間に、foo.serviceがCPU 0を消費していることを確認します。

    出力例:

    top - 19:18:15 up 21:57,  3 users,  load average: 2.15, 2.32, 2.25
    Tasks: 159 total,   4 running, 155 sleeping,   0 stopped,   0 zombie
    %Cpu0  : 89.1 us,  7.3 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.7 hi,  0.3 si,  2.6 st
    %Cpu1  : 93.7 us,  5.3 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.7 hi,  0.3 si,  0.0 st
    MiB Mem :  14707.8 total,  13640.1 free,    420.5 used,    647.2 buff/cache
    MiB Swap:   4096.0 total,   4096.0 free,      0.0 used.  13984.3 avail Mem
    
        PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
     280921 root      20   0  228492   1776   1488 R  93.4   0.0   0:07.74 sha1sum
     279185 alice     20   0  228492   1816   1524 R  65.6   0.0   7:35.18 sha1sum
     279291 ralph     20   0  228492   1840   1552 R  32.8   0.0   7:00.30 sha1sum
       2026 oracle-+  20   0  935920  29280  15008 S   0.3   0.2   1:03.31 gomon
          1 root      20   0  388548  14716   9508 S   0.0   0.1   0:22.30 systemd
          2 root      20   0       0      0      0 S   0.0   0.0   0:00.10 kthreadd
    ...
    

CPU割当て制限の割当て

最後に、ralphのCPU時間の上限を設定します。

  1. oracleユーザーとしてログインした端末に戻ります。

  2. 割当てを5%に設定します

    sudo systemctl set-property user-8000.slice CPUQuota=5%
    

    変更はただちに有効になり、aliceユーザー端末で実行中の最上位の出力に表示されます。

    出力例:

    top - 19:24:53 up 22:04,  3 users,  load average: 2.21, 2.61, 2.45
    Tasks: 162 total,   4 running, 158 sleeping,   0 stopped,   0 zombie
    %Cpu0  : 93.0 us,  4.7 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.7 hi,  0.0 si,  1.7 st
    %Cpu1  : 91.7 us,  5.6 sy,  0.0 ni,  0.0 id,  0.0 wa,  1.0 hi,  1.0 si,  0.7 st
    MiB Mem :  14707.8 total,  13639.4 free,    420.0 used,    648.4 buff/cache
    MiB Swap:   4096.0 total,   4096.0 free,      0.0 used.  13984.7 avail Mem
    
        PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
     280921 root      20   0  228492   1776   1488 R  97.4   0.0   6:26.75 sha1sum
     279185 alice     20   0  228492   1816   1524 R  92.1   0.0  12:21.12 sha1sum
     279291 ralph     20   0  228492   1840   1552 R   5.3   0.0   8:44.84 sha1sum
          1 root      20   0  388548  14716   9508 S   0.0   0.1   0:22.48 systemd
          2 root      20   0       0      0      0 S   0.0   0.0   0:00.10 kthreadd
    ...
    
  3. oracle端末ウィンドウを使用して、ralphユーザーのキャップを元に戻します。

echo "max 100000" | sudo tee -a user-8000.slice/cpu.max

割当て制限はcpu.maxファイルに書き込まれ、デフォルトはmax 100000です。

出力例:

[oracle@ol8-server user.slice]$ echo "max 100000" | sudo tee -a user-8000.slice/cpu.max
max 100000

cgroups v2を有効にし、システムのロード中にユーザーを特定のCPUに制限し、そのCPUの割合のみを使用するようにロックできます。Oracle Linuxでその他のリソースを確認してください。

詳細情報

関連項目:

その他の学習リソース

docs.oracle.com/learnの他のラボを調べるか、Oracle Learning YouTubeチャネルでさらに無料の学習コンテンツにアクセスします。さらに、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerにします。

製品ドキュメントは、Oracleヘルプ・センターを参照してください。