「launchctl」でスワップを停止
最初に起動されるプロセスは「init
」。これはUNIX系OSにおける常識のひとつだったといっていい。init
がシェルを起動し、それにシェルスクリプト(/etc/rc
)を実行させることが、典型的なシステム初期化の手続きだ。
しかし、OS XではTigerのときinit
を廃止し、代わりに「launchd
」を採用した。この新しいスーパーサーバーは、起動時に/System/Library/LaunchDaemons
および/Library/LaunchDaemons
の内容をチェックし、必要なサービス(デーモン)を起動する。サービスごとにXML形式の設定ファイル(launchd.plist)が用意され、パラメータはそこに記述するという仕組みだ。
話は変わって「スワップ」。OS Xでは、メモリー消費量が物理メモリー容量を超えるタイミングで仮想メモリー領域上に作業領域を作成(スワップアウト)するが、専用パーティションではなく起動用ボリューム(/private/var/vm
)を使ううえ、一度スワップアウトされたプロセスは物理メモリー領域を使わなくなってしまう。そうなるとシステムのレスポンスが低下するので、4GB超の物理メモリーを搭載することが当たり前となりつつある現在、スワップなしでやり繰りすることを検討する価値はあるだろう。
スワップアウトは、コマンド「dynamic_pager
」により自動処理されるが、これは「launchctl」によって起動されたデーモンで、ユーザーと対話形式で実行される一般的なコマンドとは性質が異なる。dynamic_pager
の機能を停止させる場合には、launchd
管理用のlaunchctl
コマンドを、以下の要領で実行すること。
$ sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
これでスワップアウトは発生しなくなる……が、今度は物理メモリーを使い切ってしまうとシステムが不安定化する可能性が出てくる。「それでは困る、安全第一」という場合には、以下の通りコマンドを実行すれば、システムの既定値どおりdynamic_pager
が起動し、必要なタイミングでスワップアウトしてくれる。必要に応じて使い分けていただきたい。
$ sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
この連載の記事
-
第187回
iPhone
NFCの世界を一変させる!? iOS 11「Core NFC」の提供開始が意味するもの -
第186回
iPhone
Appleと「4K HDR」 - iOS 11で写真/動画を変える「HEIF」と「HEVC」 -
第185回
iPhone
iPhone 7搭載の「A10 Fusion」「W1」は何を変えるか -
第184回
iPhone
オープンソース化された「PowerShell」をMacで使う -
第183回
iPhone
アップル製デバイス連携の鍵、「Continuity」とは? -
第182回
iPhone
DCI-P3準拠へと歩むiPhone/iPad - WWDC基調講演で秘められた新技術は、ここにある(2) -
第181回
iPhone
WWDC基調講演で秘められた新技術は、ここにある(1) -
第180回
iPhone
WWDC直前、買い替え前にマイMacのココをチェック -
第179回
iPhone
私がiTunesを使わなくなった5つの理由 -
第178回
iPhone
今あえてiPhone「Live Photos」を知る -
第177回
iPhone
「Windows Subsystem for Linux」はOS Xのライバルとなるか? - この連載の一覧へ