nmtysh.log

Tech系のネタや日々の独り言などを書いています。

PerfPowerServices が暴走していたので対処した際のメモ

PerfPowerServices が暴走していたので対処した際のメモです。

環境

何が起きていたか

アクティビティモニターを確認するとPerfPowerServicesがCPUを70%ほど使い続けている状態でした。
発見してから2時間ほど放置しても下がらず、たまたまディスクタブで使用量を確認すると毎秒10MBの書き込みで100GB以上書き込み続けている状態でした。

効果があった方法

下記のファイルを削除して、アクティビティモニターでPerfPowerServicesを終了したらCPU負荷や異常なDisk書き込みがなくなりました。

  • /private/var/db/powerlog/Library/BatteryLife/CurrentPowerlog.PLSQL
  • /private/var/db/powerlog/Library/BatteryLife/CurrentPowerlog.PLSQL-wal
  • /private/var/db/powerlog/Library/BatteryLife/CurrentPowerlog.PLSQL-shm

試したけど効果がなかったもの

  • プロセス終了、プロセス強制終了
    • すぐに自動起動してCPU負荷とDisk書き込みを発生させました
  • OS再起動
    • 効果無し(同上)
  • セーフブート
    • 効果無し(同上)
  • DiskのFirst Aid
    • ディスクのエラー無し
  • ハードウェア診断
    • 異常無し
  • OSの上書きインストール
    • 効果無し(同上)
  • sudo launchctl unload PerfPowerServices
    • エラー( Unload failed: 5: Input/output error )
  • sudo launchctl bootout system/com.apple.PerfPowerServices
    • パーミッションエラーで実行できず( Boot-out failed: 150: Operation not permitted while System Integrity Protection is engaged )

効果があった方法(再掲)

lsofで開いているファイルを確認すると /private/var/db/powerlog/Library/BatteryLife/private/var/db/powerlog/Library/PerfPowerTelemetry 以下のファイルを開いていました。

※下記のコマンド実行結果は改善後の出力なので厳密には違います。

$ sudo lsof -p 170
Password:
COMMAND   PID USER   FD     TYPE             DEVICE SIZE/OFF                NODE NAME
PerfPower 170 root  cwd      DIR                1,4      640                   2 /
PerfPower 170 root  txt      REG                1,4   178624 1152921500312512050 /usr/libexec/PerfPowerServices
PerfPower 170 root  txt      REG                1,4    57024            50860664 /Library/Preferences/Logging/.plist-cache.Rm5iXxTt
PerfPower 170 root  txt      REG                1,4      110 1152921500312133407 /System/Library/CoreServices/SystemVersion.bundle/English.lproj/SystemVersion.strings
PerfPower 170 root  txt      REG                1,4    32768            50854583 /private/var/db/powerlog/Library/BatteryLife/CurrentPowerlog.PLSQL-shm
PerfPower 170 root  txt      REG                1,4    32768            13245936 /private/var/db/powerlog/Library/PerfPowerTelemetry/ExtendedPersistence/CurrentLog.EPSQL-shm
PerfPower 170 root  txt      REG                1,4    32768            31571665 /private/var/db/powerlog/Library/PerfPowerTelemetry/CleanEnergy/CurrentCleanEnergyDB.CESQL-shm
PerfPower 170 root  txt      REG                1,4   826310 1152921500312174626 /System/Library/Frameworks/Foundation.framework/Versions/C/Resources/FoundationErrors.loctable
PerfPower 170 root  txt      REG                1,4   238064            50210472 /private/var/db/timezone/tz/2023d.1.0/icutz/icutz44l.dat
PerfPower 170 root  txt      REG                1,4   281152 1152921500312511242 /usr/lib/libobjc-trampolines.dylib
PerfPower 170 root  txt      REG                1,4   138105            50861413 /private/var/db/analyticsd/events.allowlist
PerfPower 170 root  txt      REG                1,4   373520 1152921500312155548 /System/Library/Extensions/IOHIDFamily.kext/Contents/PlugIns/IOHIDLib.plugin/Contents/MacOS/IOHIDLib
PerfPower 170 root  txt      REG                1,4   935744 1152921500312171489 /System/Library/Frameworks/CoreMediaIO.framework/Versions/A/Resources/VDC.plugin/Contents/MacOS/VDC
PerfPower 170 root  txt      REG                1,4 32986592 1152921500312520346 /usr/share/icu/icudt72l.dat
PerfPower 170 root    0r     CHR                3,2      0t0                 314 /dev/null
PerfPower 170 root    1u     CHR                3,2      0t0                 314 /dev/null
PerfPower 170 root    2u     CHR                3,2    0t316                 314 /dev/null
PerfPower 170 root    3u     REG                1,4  1826816            50854578 /private/var/db/powerlog/Library/BatteryLife/CurrentPowerlog.PLSQL
PerfPower 170 root    4u     REG                1,4   333752            50854582 /private/var/db/powerlog/Library/BatteryLife/CurrentPowerlog.PLSQL-wal
PerfPower 170 root    5u     REG                1,4    32768            50854583 /private/var/db/powerlog/Library/BatteryLife/CurrentPowerlog.PLSQL-shm
PerfPower 170 root    6u     REG                1,4     4096            13245928 /private/var/db/powerlog/Library/PerfPowerTelemetry/ExtendedPersistence/CurrentLog.EPSQL
PerfPower 170 root    7u     REG                1,4  1433792            13245935 /private/var/db/powerlog/Library/PerfPowerTelemetry/ExtendedPersistence/CurrentLog.EPSQL-wal
PerfPower 170 root    8u     REG                1,4    32768            13245936 /private/var/db/powerlog/Library/PerfPowerTelemetry/ExtendedPersistence/CurrentLog.EPSQL-shm
PerfPower 170 root    9u     REG                1,4    53248            31571655 /private/var/db/powerlog/Library/PerfPowerTelemetry/CleanEnergy/CurrentCleanEnergyDB.CESQL
PerfPower 170 root   10u     REG                1,4  2818112            31571664 /private/var/db/powerlog/Library/PerfPowerTelemetry/CleanEnergy/CurrentCleanEnergyDB.CESQL-wal
PerfPower 170 root   11u     REG                1,4    32768            31571665 /private/var/db/powerlog/Library/PerfPowerTelemetry/CleanEnergy/CurrentCleanEnergyDB.CESQL-shm
PerfPower 170 root   12r     DIR                1,4       96            50836975 /private/var/db/powerlog
PerfPower 170 root   13u    IPv4 0xd8b7965fe99ee93d      0t0                 UDP *:*
PerfPower 170 root   14u  KQUEUE                                                 count=0, state=0x8
PerfPower 170 root   15u  KQUEUE                                                 count=0, state=0x8
PerfPower 170 root   16u    IPv4 0xd8b7965fe99e753d      0t0                 UDP *:*
PerfPower 170 root   17u    IPv4 0xd8b7965fe99e553d      0t0                 UDP *:*
PerfPower 170 root   18u    IPv4 0xd8b7965fe99e713d      0t0                 UDP *:*
PerfPower 170 root   19u     CHR               21,0      0t0                 623 /dev/xcpm

/private/var/db/powerlog/Library/BatteryLife/Archives 以下に大量のローテートされたと思わしきファイルがありましたが、なぜか powerlog_1970-01-08_041E275E.PLSQL.gzpowerlog_1984-05-07_063FE7A3.PLSQL.gz など1970年から徐々に未来に向かう方向で1分間に30個前後のファイルが生成されていました。
1984-05-07などとありますが作成されたのは昨日や今日です。

CurrentPowerlog.PLSQL などが破損しているのではないかと推測して、これらのファイルを削除して、プロセスを再起動したら異常なファイル書き込みやArchivesの生成がなくなりました。

副作用

CurrentPowerlog.PLSQL を削除したからなのか、システム設定のバッテリーにあるバッテリー残量や画面オンの使用状況がクリアされました。
(異常時は画面オフの時もずっと画面オンとして扱われていたのもファイルが破損していた説が濃厚になりました)

最後に

PerfPowerServices で検索しても全然情報が出てこないので困りました。
解消後はOSの再起動をしても、プロセスが落ち着いている状態です。
ただ、ファイルがローテートされるタイミングがいつになるかわかりませんが、ローテートされた時に再び暴走しないかが不安です。
たまたま、異常状態に気がつけたけど、解消するまでにどれだけのdisk書き込みが発生して寿命に影響したのだろうか……

あと、OS復旧の起動やOSイメージのDLが遅すぎ……
寝る前に放置して翌朝確認したら、OSイメージDL後のインストール開始時の再起動でFileVaultのパスワード入力待ちで停止していたのがショックでした。

対応時のツイートメモ(抜粋)