ろぼいんブログ

CORESERVERでThreadPoolBuildErrorが出た場合の対処法

目次

はじめに

このブログは現在、Cloudflare Pagesの無料枠とAstroを使って構築しています。しかし、ページ数が増えるにつれてビルド時間が長くなってきたので、ビルド時の環境構築やビルド成果物のアップロードにかかる時間をなくすために、CORESERVERの導入を検討しています。

実際に導入する前にCORESERVERの30日間無料体験で試してみたところ、後述のエラーによってOGP画像の自動生成が失敗することが判明しました。今回は、その対処法について紹介します。

広告

エラー内容

Astroのビルド中に次のようなエラーが発生しました。具体的には、OGP画像の自動生成に使用しているSatoriの内部でエラーが発生していると思われます。

Terminal window
thread '<unnamed>' panicked at src/index.crates.io-6f17d22bba15001f/rayon-core-1.12.1/src/registry.rs:168:10:
The global thread pool has not been initialized.: ThreadPoolBuildError { kind: IOError(Os { code: 11, kind: WouldBlock, message: "Resource temporarily unavailable" }) }
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
Aborted (core dumped)

エラーメッセージを読むと、Rustの並列処理ライブラリーであるRayonの処理中にエラーが発生しているようです。

Next.jsで同様のエラーが発生した場合は、swcMinifyfalseに設定することで解決するという記事がいくつかありました。しかし、私の場合はNext.jsではなくAstroを使っているため、この対処法は使えません。

解決方法

しばらくインターネットをさまよっていたところ、こちらのDiscussionsを見つけました。

内容としては簡単で、環境変数にRAYON_NUM_THREADS=1を設定すれば解決できるというものです。

広告

これを試してみると、エラーが解消されました。CORESERVERはLinuxなので、exportコマンドを使って環境変数を設定します。

Terminal window
export RAYON_NUM_THREADS=1

手元の環境では、RAYON_NUM_THREADS=64でも問題なく動作しました。CORESERVERの仕様が最大64コアとなっていたので、それに合わせた数値を設定しました。64でも引き続きエラーが出る場合は、数値を減らしてみてください。

記事をシェア

Xに共有するBlueskyに共有するMisskeyに共有するLINEに共有するThreadsに共有する

フォローして最新情報を入手

Googleの優先ソースに追加すると、このサイトの記事をGoogleで見つけやすくなります。また、ぜひXやRSSフィードもフォローしてください。

Googleの優先ソースとして追加するGoogleの優先ソースとして追加するXのロゴ
著者のアイコン画像

生まれた時から、母国語よりも先にJavaScriptを使っていました。ネットの海のどこにもいなくてどこにでもいます。

Webフロントエンドプログラマーとして、TypeScriptを用いたWebアプリやブラウザー拡張機能を制作。Xのシャドウバン検知ツール「Shadowban Scanner」やリンクカード復活ツール「Restore Link Card」を公開し、国内外のメディアで紹介されました。iGEM 2023ではJapan-UnitedチームのWikiを制作してGrand Prizeの獲得に貢献。ブログではXやSNSの最新ニュース、不具合の検証と対処法、フロントエンド開発の知見を発信しています。