たまに掃除は必要!熱暴走…

イメージ
 そんなに暑くないのに… 本日、午前中にオンラインで打合せをしていると、突然マシンがダウン。 一瞬、停電か?と思ったもののディスプレイの電源は入っている。 あれっ?と思い、すぐさまノートで打合せを継続。 その間に、再度マシンの電源を投入。 問題なく起動する。 でも、CPU温度がたまたま目に入り、95℃を超えて徐々に上昇していく。 105℃あたりで再度マシンダウン。 これは、熱暴走によるダウンの可能性が高い。 以前、CPUをRyzen7→9にした頃は、60℃〜70℃程度だった記憶がある。 本当はGW中にSSDの載せ替えを行う予定だったけれど、忙しくて先延ばしにしていた。 その時やっていれば、多分掃除もしただろうに…。 ということで、午後からマシンを解体し、掃除をすることに。 ケース本体のFANはホコリがかなり溜まっている。 GPUのFANは問題ない。 電源とCPU FANはひどい。 一旦、CPU FANを取り外し、きれいにする。ついでにCPUグリスも塗り直しセット。 動作確認すると、投入直後で40℃台。 そりゃ、熱暴走も起こすわけだ。 せっかくバラしたので、SSDの載せ替えを実施。 OSは500GBで、ユーザ領域(/home)は1TBを使用しているもののAIのmodelをいくつも落としていたり、DockerのImageが多種置いてあるため、結構容量を食っている。 今回、2TBのSSD( Hanye SSD ¥17,800- で入手済)を用意してあるので、 1TB→2TB, 500GB→1TBと玉突きで移動させることを計画していたので実施する。 本当は、ddコマンドで移すつもりだったのだけれど、3月にお客さんのところで使いそうだったので、 ORICOのクローン機能付SSDアダプタ を入手済。 裸族のSSD版ですね…。1万円程度の品です。 これに、新品のSSDとこれまでの1TBのSSDを差し込んでクローン開始。 そこそこ時間はかかるものの、放置でOK。 ただ、HanyeのSSDについているヒートシンクが引っかかるため、一旦取り外してクローン後取り付ける必要があった。 続いて、500GB→先程の1TBに書き込み。 ただ、1TB(samsungの980pro)が、先程のクローンでかなり熱くなっていたため、速度低下が激しい感じ。1TB→2TBよりも時間がかかった感じ。 ...

conky設定変更

環境表示ツールの再設定

 SSDを増設したが、NVMe M.2 は発熱が酷く、あまり温度が上がると、速度低下を起こすことが知られている。

ということで、自前のディスクも監視した結果を表示するようにした。


conkyというツールを、これまでも使用していてCPUの負荷状況、メモリの使用状況などをデスクトップに表示させていた。

でもって、自分の設定ファイルを紹介。

homeフォルダに [.conkyrc]というファイルを作成し、以下のような内容を記述

conky.config = {
  use_spacer = 'left',
  pad_percents = 3,
  background = false,
  double_buffer = true,
  draw_shades = true,
  font = 'Migu 1M DejaVu Sans Mono:bold:size=10',
  use_xft = true,
  alignment = 'top_right',
  gap_x = 10,
  gap_y = 40,
  own_window_argb_visual = true,
  own_window_argb_value = 50,
  own_window_type = 'normal',
  own_window_hints = 'undecorated,below,skip_taskbar,skip_pager,sticky',
  own_window = true,
  update_interval = 5.0,
}

conky.text = [[
${color orange}Hostname: ${color}${nodename}
${color orange}Kernel:   ${color}${sysname} ${kernel} on ${machine}
${color orange}Uptime:   ${color}${uptime}
${exec /usr/lib/update-notifier/apt-check --human-readable}
${hr}
${color orange}CPU:${color} ${freq_g} GHz
${color orange}CPU Temp:${color} ${execi 5 sensors | grep Tdie | cut -c 15-19} ℃
${color orange} 1:${color} ${cpu cpu1}% ${cpubar cpu1}
${color orange} 2:${color} ${cpu cpu2}% ${cpubar cpu2}
${color orange} 3:${color} ${cpu cpu3}% ${cpubar cpu3}
${color orange} 4:${color} ${cpu cpu4}% ${cpubar cpu4}
${color orange} 5:${color} ${cpu cpu5}% ${cpubar cpu5}
${color orange} 6:${color} ${cpu cpu6}% ${cpubar cpu6}
${color orange} 7:${color} ${cpu cpu7}% ${cpubar cpu7}
${color orange} 8:${color} ${cpu cpu8}% ${cpubar cpu8}
${color orange} 9:${color} ${cpu cpu9}% ${cpubar cpu9}
${color orange}10:${color} ${cpu cpu10}% ${cpubar cpu10}
${color orange}11:${color} ${cpu cpu11}% ${cpubar cpu11}
${color orange}12:${color} ${cpu cpu12}% ${cpubar cpu12}
${cpugraph}
${color orange}Name $alignr PID   CPU%   MEM%
${color lightgrey} ${top name 1} $alignr ${top pid 1} ${top cpu 1} ${top mem 1}
${color lightgrey} ${top name 2} $alignr ${top pid 2} ${top cpu 2} ${top mem 2}
${color lightgrey} ${top name 3} $alignr ${top pid 3} ${top cpu 3} ${top mem 3}
${color lightgrey} ${top name 4} $alignr ${top pid 4} ${top cpu 4} ${top mem 4}
${color lightgrey} ${top name 5} $alignr ${top pid 5} ${top cpu 5} ${top mem 5}
${color orange}Load average: ${color}${loadavg}
${color orange}Processes: ${color}${processes}
${color orange}Running:${color} ${running_processes}
${hr}
${color orange}RAM:  ${color}${mem}/${memmax}
${memperc}% ${membar 4}
${color orange}Swap: ${color}${swap}/${swapmax}
${swapperc}% ${swapbar 4}
${memgraph}
${hr}
${color orange}/     ${color}${fs_used /}/${fs_size /} ${fs_bar 6 /}
${color orange}SSD0:  ${execi 5 nvme smart-log /dev/nvme0 | grep temperature | cut -c 38-40 } ℃
${color orange}/home ${color}${fs_used /home}/${fs_size /home} ${fs_bar 6 /home}
${color orange}SSD1:  ${execi 5 nvme smart-log /dev/nvme1 | grep temperature | cut -c 38-40 } ℃
${hr}
${if_up enp9s0}
${color orange}IP:   ${color}${addr enp9s0}
${color orange}Up:   ${color}${upspeed enp9s0} ${color orange}Down:{color}${downspeed enp9s0}
${upspeedgraph enp9s0 32,140 000000 ffffff} ${downspeedgraph enp9s0 32,140 000000 ffffff}
${endif}
${if_up enxbc5c4c5be981}
${color orange}IP:   ${color}${addr enxbc5c4c5be981}
${color orange}Up:   ${color}${upspeed enxbc5c4c5be981} ${color orange}Down: ${color}${downspeed enxbc5c4c5be981}
${upspeedgraph enxbc5c4c5be981 32,140 000000 ffffff} ${downspeedgraph enxbc5c4c5be981 32,140 000000 ffffff}
${endif}
]]

これで、次のような表示がデスクトップ上に。

内容を解説すると
初めの、.config={ ... } に表示位置やフォントなど基本的な設定を記述。
.text = [[ ... ]] に、表示内容を設定

CPUの温度表示


${execi 5 sensors | grep Tdie | cut -c 15-19} ℃

の部分は、sensors コマンドの結果を、grepで検索(Tdieを含む行)
でもって、15桁目から19桁目を5秒毎に出力 という意味になります。

そもそも、sensorsコマンドは、lm-sensorsをインストールしないと使用できないので以下の手順が必要

$ sudo apt install lm-sensors
$ sensors
k10temp-pci-00c3
Adapter: PCI adapter
Tdie:         +52.4°C  (high = +70.0°C)
Tctl:         +52.4°C  

nct6779-isa-0290
Adapter: ISA adapter
Vcore:                 480.00 mV (min =  +0.00 V, max =  +1.74 V)
in1:                     1.28 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
AVCC:                    3.38 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
+3.3V:                   3.38 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in4:                     1.87 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in5:                     1.03 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in6:                     1.22 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
3VSB:                    3.44 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
Vbat:                    3.26 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in9:                     0.00 V  (min =  +0.00 V, max =  +0.00 V)
in10:                  944.00 mV (min =  +0.00 V, max =  +0.00 V)  ALARM
in11:                    1.08 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in12:                    1.70 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in13:                  312.00 mV (min =  +0.00 V, max =  +0.00 V)  ALARM
in14:                    1.84 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
fan1:                   636 RPM  (min =    0 RPM)
fan2:                  1672 RPM  (min =    0 RPM)
fan3:                     0 RPM  (min =    0 RPM)
fan4:                   653 RPM  (min =    0 RPM)
fan5:                     0 RPM  (min =    0 RPM)
SYSTIN:                 +30.0°C  (high =  +0.0°C, hyst =  +0.0°C)  ALARM  sensor = thermistor
CPUTIN:                 +39.5°C  (high = +80.0°C, hyst = +75.0°C)  sensor = thermistor
AUXTIN0:                +14.0°C    sensor = thermistor
AUXTIN1:                +29.0°C    sensor = thermistor
AUXTIN2:                +22.0°C    sensor = thermistor
AUXTIN3:                -27.0°C    sensor = thermistor
SMBUSMASTER 0:          +52.5°C  
PCH_CHIP_CPU_MAX_TEMP:   +0.0°C  
PCH_CHIP_TEMP:           +0.0°C  
PCH_CPU_TEMP:            +0.0°C  
intrusion0:            ALARM
intrusion1:            ALARM
beep_enable:           disabled


この結果の初めの方にある、「Tdie:         +52.4°C  (high = +70.0°C)」の温度部分を取り込んで表示することになるわけです。


SSDの温度表示

${execi 5 nvme smart-log /dev/nvme0 | grep temperature | cut -c 38-40 } ℃

こいつは、nvmeコマンドで、SSD0(/dev/nvme0)の結果から、温度(temperatue)の行を取り出し、その行の38から40桁目を出力させています。5秒毎…。

$ sudo nvme smart-log /dev/nvme0
Smart Log for NVME device:nvme0 namespace-id:ffffffff
critical_warning                    : 0
temperature                         : 27 C
available_spare                     : 100%
available_spare_threshold           : 5%
percentage_used                     : 9%
data_units_read                     : 129,187,397
data_units_written                  : 49,560,539
host_read_commands                  : 1,198,407,322
host_write_commands                 : 1,036,537,291
controller_busy_time                : 4,550
power_cycles                        : 18
power_on_hours                      : 18,311
unsafe_shutdowns                    : 12
media_errors                        : 0
num_err_log_entries                 : 127
Warning Temperature Time            : 0
Critical Composite Temperature Time : 0
Thermal Management T1 Trans Count   : 0
Thermal Management T2 Trans Count   : 0
Thermal Management T1 Total Time    : 0
Thermal Management T2 Total Time    : 0


nvmeコマンド自体は、nvme-cliをインストールする必要があるので以下のように…。

$ sudo apt install nvme-cli

ところが、このnvmeコマンドは、管理者権限がないと正常に情報が取得できない。
でも、conkyはユーザ権限で実行している。
表示するためにはsudoで管理者として実行しないといけない
そのためには、パスワードの入力が必要…
バックグラウンドで実行しているコマンドに定期的にパスワードを入れるなんて無理です。

そのためにLinuxには特殊なアクセス権が存在していて…。

SUIDと言います。

$ sudo chmod u+s /usr/sbin/nvme

と実行すると、nvmeコマンドにSet User ID(SUID)フラグを設定するわけです。
これは、ファイル所有者の権限で実行してくれる。
nvmeの所有者がrootなので、root権限(管理者権限)で勝手に実行してくれることになるわけですな…。

$ ls -l /usr/sbin/nvme

として、確認してみると…

$ ls -l /usr/sbin/nvme
-rwsr-xr-x 1 root root 436120  9月  7  2020 /usr/sbin/nvme*

最初のユーザのところは、本来「rwx」なんだけど 「rws」と表示が変更されているのが確認できる。

これで、パスワード入力無しで、管理者としてこのコマンドを実行可能になる。
(何でもかんでもこの設定をしてはいけないです…)

念の為、

$ nvme smart-log /dev/nvme0

と、sudo無しで実行して、同じように表示されればOK。



設定は、分かり難い箇所もあるでしょうが、1つ1つの意味を理解する作業をしていけば、すんなり納得できるでしょう。
自分なりに変更などもできるようになるので、お勧めです。


時々、このような解説を行なっていこうかと思案中。

コメント

このブログの人気の投稿

Ubuntu24.04 でGUIが死んだ

VirtualBoxが異常

MEGAにも弱点があった?