squid: 不正な命令 (コアダンプ)

squid: 不正な命令 (コアダンプ)

OS: Oracle Solaris 11.3.1.5.2、CPUアーキテクチャ: X86

私は最近Squidをインストールしました

$ pkg install squid

これはうまくいきました:

root@darwin1:~# pkg info squid
          Name: web/proxy/squid
       Summary: Squid Web Proxy Cache
   Description: Squid is a caching proxy for the Web supporting HTTP, HTTPS,
                FTP, and more.
      Category: Web Services/Application and Web Servers
         State: Installed
     Publisher: solaris
       Version: 3.5.5
 Build Release: 5.11
        Branch: 0.175.3.0.0.30.0
Packaging Date: Fri Aug 21 17:30:06 2015
          Size: 51.84 MB
          FMRI: pkg://solaris/web/proxy/[email protected],5.11-0.175.3.0.0.30.0:20150821T173006Z

しかし、Squid を実行できません:

root@darwin1:~# /usr/squid/sbin/squid -h
Illegal Instruction (core dumped)

コマンドfileを実行すると次のようになります:

root@darwin1:~# file /usr/squid/sbin/squid
/usr/squid/sbin/squid:  ELF 32-bit LSB executable 80386 Version 1, dynamically linked, not stripped

私はローカル (カーネル以外) ゾーン内にいます。問題ないはずですよね?

なぜコアダンプするのですか?

答え1

申し訳ありませんが、私自身が答えを見つけたと思います。http://wiki.squid-cache.org/KnowledgeBase/IllegalInstructionError

(引用開始)

Squid 3.4 での不正命令エラー

概要 Squid 3.4以降、特定の準仮想化システム完全な仮想化を主張しているもの (少なくとも KVM、Xen、および Xen 派生版は今のところ確認されています) でも、起動直後に不正な命令エラーでクラッシュすることがあります。

症状

Squid は、Intel 互換プロセッサ上の仮想マシンで起動するとすぐに不正命令エラーでクラッシュします。

説明

Squid ビルド システムは、デフォルトで-march=native gcc オプションを使用して結果のバイナリを最適化します。残念ながら、一部の (準) 仮想化システムは、宣伝されている命令セット全体をサポートしていません。コンパイラはそれを認識せず、このエラーを引き起こす命令を生成します。

回避策

これらの最適化は役立ちますが、特に ia64/amd64 プラットフォームでは、squid が完全に機能するために必須ではありません。検出されたデフォルトは、--disable-arch-native configure スクリプトにオプションを指定することで上書きできます。

(引用終了)

Solarisを実行していますVMware ESXi 6.0の内部。だからそれが理由だと思います。

他の人もこれに遭遇する可能性があるので、自分の質問を削除するつもりはありません。

答え2

-march=nativeOracle サポート契約を結んでいるお客様は、Solaris 11.3 SRU 17 (11.3.17.5.0) でフラグを無効にしてコンパイルされた squid のバージョンを/supportリポジトリから入手できます。これには次の修正が含まれます。

  • バグ 22051233 - AMD プロセッサ上で squid がすぐにダウンする
  • バグ 22380085 - Squid VM 内で実行中に不正な命令が発生する

答え3

Solaris 11.3 でも同じ問題が発生しました。Squid サービスを起動するたびに、maintenanceモードになります ( を使用して確認できますsvcs -a | grep squid)。

maintenance    21:17:13 svc:/network/http:squid

ログ ( /var/svc/log/network-http:squid.log) に、コアダンプ エラー行が表示されます:

/lib/svc/method/http-squid: line 23: 1833: Illegal instruction(coredump)

/lib/svc/method/http-squid23 行目は、起動スクリプト内でSquid を起動しようとする行です。2 番目の数字 (この例では 1833) は失敗するたびに増加しているように見えますが、意味はありません。

結局、/usr/squid/sbin/squid古い Solaris 11.0 インストール (46 MB ではなく 17 MB) から Squid バイナリをコピーしたところ、正常に動作するようになりました。「適切な」解決策ではありませんが、古いインストールにアクセスできる場合は確かに簡単です。

関連情報