バックグラウンドでスリープ中のUnixメモリの問題

バックグラウンドでスリープ中のUnixメモリの問題

私はLinuxサーバーで作業していますが、これは利用できませんcron。したがって、この問題を解決するために、次のように特定の時間に実行する必要があるスクリプトを作成しました。

while true
do
    ...
    ...
    sleep 1d #changes upon requirement of my script
done

私はいつもバックグラウンドでスクリプトを起動しますnohup ./script.sh &

私の問題は、サーバーでこれらのスクリプトの6/7が実行されているとします。ほとんどの時間は寝ています。これはsleep一種のメモリを消費しますか?サーバーのパフォーマンスに影響しますか?この問題を解決する効果的な方法はありますか?

ベストアンサー1

はい - このスクリプトはメモリを消費しています。実際、メモリを使用して実行される2つのプロセスがあります。

  • シェル(例:bash)
  • sleepそれ自体。

sleep非常に軽量ですが、シェルは数メガバイトのメモリを消費できます。私のシステムでは、アイドル非対話型bashは約1MiBを消費し、スリープモードは0.7MiBを消費します。 (RSS列を見ると)確認できます。それらの多くは、実際に使用するすべてのプロセス間pstop共有されるライブラリのようなものです。おおむねそれぞれ1MiB未満になります。

Linuxでは、ここで興味のあるもの/proc/pid/status(および)を使って/proc/pid/smaps詳細を得ることができます。Vm*たとえば、

bash -c 'grep Vm /proc/$$/status'
VmPeak:    13380 kB
VmSize:    13380 kB
VmLck:         0 kB
VmPin:         0 kB
VmHWM:       972 kB
VmRSS:       972 kB
VmData:      220 kB
VmStk:       132 kB
VmExe:       208 kB
VmLib:      2320 kB
VmPTE:        48 kB
VmPMD:        12 kB
VmSwap:        0 kB

合計RSS(使用されているRAMの量)は972kBであり、そのうち220kBは「データ」(一般的に共有されていない)であり、132kBはスタック(また共有されていない)であることがわかります。したがって、各追加のbash実行は非常に小さいです。

いくつかのアドバイス:このようないくつかの回避策を実行する必要がある場合... cronが利用できないのはなぜですか?これは、予期しないエラーが発生する可能性が低い、より簡単できれいなアプローチです(高速です!sleep 1d夏時間の変更を処理する方法は? )。システム管理者が、承認されていない人がcronジョブをスケジュールすることを心配している場合は、その人が/etc/cron.allowcrontab /etc/cron.deny(1)にログインしていることを知らせてください。

おすすめ記事