GNU/Linux >> Linux の 問題 >  >> Linux

Startpar コマンドの例を使用して Linux の起動プロセスを高速化する方法

典型的なシナリオでは、起動プロセス中に、ランレベル システム起動スクリプトが 1 つずつ実行されます。

特定の実行レベルの起動スクリプトは、前のスクリプトが完全に実行されるまで実行されません。起動中に特定のサービスが何らかの理由でハングした場合、タイムアウトして次の起動スクリプトに移るまでに時間がかかる場合があります。

Startpar ユーティリティは、複数の実行レベル スクリプトを並行して実行するために使用されます。これにより、サーバーの起動プロセスが高速化されます。

Startpar ユーティリティは sysvinit パッケージの一部です。

startpar の一般的な構文は次のとおりです。

startpar –p par –i iorate –t timeout –T global timeout –a arg prg1 prg2

startpar –p par –I iorate –t timeout –T global timeout –M boot|start|stop

以下は、startpar のさまざまなオプションです:

  • -p 並行して実行するプロセスの数
  • -i プロセス ブロックの重み係数を変更します。デフォルトは 800 です。
  • -t 出力が発生しなかった場合にスクリプトのバッファを空にするためのタイムアウト。
  • -T グローバル タイムアウト。以前のスクリプトのバッファ出力をフラッシュするために使用されます。
  • -a すべてのスクリプトに提供される引数
  • -M startpar を「make」モードに切り替えます。
  • -P 以前のランレベルを指定
  • -N 次のランレベルを指定

startpar が実行レベル スクリプトを実行している場合、スクリプトの出力はバッファリングされ、ロギング機能への制御された書き込みが可能になります。

他のスクリプトが並行して実行されている場合は、ロギングが完了するのを待ってから、バッファからロギング領域にデータを書き込みます。 –t および –T オプションは、最後の出力がバッファにキャプチャされてからの時間に応じて、これらのバッファのクリアを制御するために使用されます。

私のシステムでは、次のバージョンの startpar があります:

# startpar -v
startpar version 0.54

Startpar コマンドは、–M オプションを使用して「make」モードで使用できます。このモードでは、startpar は次のファイルを使用して、起動スクリプトの実行方法を決定します。
/etc/init.d/.depend.start
/etc/init.d/.depend.stop
/etc/init.d/.depend.boot

以下は .depend.start ファイルの例です:

# cat /etc/init.d/.depend.start
TARGETS = halt fbset lvm_wait_merge_snapshot microcode.ctl earlysyslog dbus acpid random purge-kernels reboot network haldaemon boot.clock syslog ford_tso_off Sts splash_early haveged rpcbind multipathd nfs smbfs kbd irq_balancer alsasound mcelog network-remotefs sshd java.binfmt_misc clamd logd gpm ntp single atd clamav-milter canna amavis cups nscd postfix xdm cron smartd
INTERACTIVE = kbd ntp single
network: dbus
haldaemon: dbus acpid
syslog: network earlysyslog
ford_tso_off: network
Sts: network
splash_early: syslog
haveged: syslog random
rpcbind: syslog
multipathd: syslog
nfs: rpcbind
.
.
.
.
mcelog: smbfs
network-remotefs: smbfs haldaemon

「make」モードでは、startpar は .depend.start ファイルを使用して、特定のサービスを開始するために開始する必要がある依存サービスを見つけます。

上記の出力では、startpar が make オプションを使用して開始モードで実行されると、依存スクリプトが最初に開始されてから、スクリプトが並列実行されます。

以下は、システム起動シーケンス中に make モードで startpar を使用する方法の例です。

# startpar -p 4 -t 20 -T 3 -M start -P N -R 2
D-Bus already started. Not starting.
Starting acpid                    done
Re-Starting syslog services       done
Starting service at daemon        done
Starting sound driver             done
Starting cupsd                    done
Starting CRON daemon/usr/sbin/cron: can't lock /var/run/cron.pid, otherpid may be 3506: Resource temporarily unavailable
startproc:  exit status of parent of /usr/sbin/cron: 1
                                  done
Starting irqbalance                                                       unused
HAL already started. Not starting.
Starting mcelog... already running                                        done
Setting up network interfaces:
    eth0      device: Intel Corporation 82545EM Gigabit Ethernet Co
    eth0      IP address: 19.86.xxx.xxx/24                                done
    eth1      device: Intel Corporation 82545EM Gigabit Ethernet Co
    eth1      IP address: 19.86.xxx.xxx/24                                done
Setting up service network  .  .  .  .  .  .  .  .  .  .                  done
Hint: you may set mandatory devices in /etc/sysconfig/network/config
Setting up (remotefs) network interfaces:
Setting up service (remotefs) network  .  .  .  .  .  .  .  .  .  .       done
Initializing random number generator                                      done
Starting smartd                                                           unused
Disabling TSO on all interfaces and adding ETHTOOL_OPTIONS to nic config files  done
Re-Starting syslog services              done
Starting haveged daemon                  done
failed_service="alsasound"
skipped_service="irq_balancer smartd"

上記の例では、timeout 20 秒、global timeout 3 秒でバッファ領域を空にし、make モードで「start」オプションを指定して起動を示す -M で並列に実行する合計 4 つのプロセスで startpar が実行されます。開始シーケンスで使用されています。

これは /etc/init.d/.depend を使用します。 start ファイルを使用して、相互に依存しているスクリプトを確認します。 –P は以前のランレベルです –N は新しいランレベルです。

2 つのスクリプトを並行して実行するためだけに startpar を使用する別の例を次に示します。このスクリプトを /etc/init.d/rc で定義して、必要に応じてシステムの起動時にこれらのスクリプトが並行して開始されるようにすることもできます。

# startpar -p 4 -t 20 -T 3 -a start /etc/init.d/ypxfrd /etc/init.d/drbd
Starting rpc.ypxfrd              done
Starting DRBD resources:
.
.

また、一部の Linux ディストリビューションでは、/etc/init.d/rc ファイルで startpar オプションを使用するようにシステムをセットアップできます。

rc ファイルで、値「CONCURRENCY=SHELL」を「CONCURRENCY=STARTPAR」に変更するだけで、依存関係が自動的に計算され、該当するスクリプトが並行して開始されます。

# vi /etc/init.d/rc
CONCURRENCY=STARTPAR

Linux
  1. コマンドを使用してLinuxでプロセスを強制終了する方法は?

  2. 5 実用的な Linux fuser コマンドの例

  3. MTR コマンドの例を使用して Linux で Ping と Traceroute を組み合わせる方法

  1. キーバインドを使用して Linux コマンド ラインをナビゲートする方法 (Linux Ctrl コマンドの例)

  2. Linux で ip コマンドの例を使用して複数のルートを追加する方法

  3. Linux での dmsetup コマンドの使用例

  1. コマンドラインを使用してLinuxを再起動する方法

  2. Linux の Nice および Renice の例を使用してプロセスの優先度を変更する方法

  3. Linux での kill コマンドの例