0

OSX を High Sierra にアップデートし、Xcode を 9.2.0 にアップデートした後、より大きなプロジェクトのプロジェクト ビルド時間が手に負えなくなりました。ビルド時間は ~10 分から ~120 分になりました。

xcexec調査中に、Xcode がほとんどの CPU 使用率を占める子プロセスを生成することに気付きました。xcexecほとんどの時間をシステムcloseコールの呼び出しに費やします。各xcexecプロセスは、毎分約 200 万回のクローズ コールを呼び出します。

バイナリを調べるとxcexec、これは他のビルド アクション (clang など) を起動するためのラッパー ツールのようです。

Xcodeを変更せずに完全に再インストールしました。ビルド システムはデフォルトに設定されています。

この動作の原因は何ですか?

4

1 に答える 1

1

watchmanのインストール手順では、次のように設定するkern.maxfilesように指示されています。

 $ sudo sysctl -w kern.maxfiles=10485760
 $ sudo sysctl -w kern.maxfilesperproc=1048576

これらの値 (両方) のデフォルト設定は、macOS High Sierra では 131072 です。Watchman の提案は、カーネルのパフォーマンス クリティカルな設定を 80 倍変更することです。これらの値を調整すると、特にコンパイルなどのファイル負荷の高い操作の場合、パフォーマンス特性が異なる場合があります。

Watchman は制限を変更して、同時により多くのファイルを監視できるようにします。

ただし、Xcode はプロジェクトのインデックス作成を開始し、( 経由で) 許可されている数のファイルを開きますkern.maxfiles。コンパイル フェーズ中に、Xcode が起動xcexecし、インデックス作成のために開いているファイル記述子をすべて閉じてから、ビルド ステップのサブプロセスを起動します。その操作にはほとんど時間がかかりません。しかし、変更後kern.maxfiles、突然そうなります。

2015 年半ばの MBP、macOS 10.13.3、Xcode 9.2.0 でベンチマークを行いました。

私のベンチマークによると、kern.maxfilesperprocXcode のビルド パフォーマンスには影響しません。

Xcode ビルドのパフォーマンスは、kern.maxfiles327680 を超えるとすぐに大きな影響を受けます。

kern.maxfilesより大きなプロジェクトでウォッチマンをサポートする必要がある場合は、327680 に設定することをお勧めします。

の設定は、再起動後は持続しないkern.maxfilesことに注意してください。で値を調整しますsysctl/Library/LaunchDaemons/limit.maxfiles.plist

于 2018-02-02T15:20:16.900 に答える