魷魚:非法指示(核心轉儲)

魷魚:非法指示(核心轉儲)

作業系統: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

但我無法運行魷魚:

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衍生品)在啟動後不久就因非法指示錯誤而崩潰。

症狀

在 Intel 相容處理器上的虛擬機器上啟動後,Squid 立即崩潰並出現非法指令錯誤

解釋

Squid 建置系統預設使用-march=native gcc 選項來最佳化產生的二進位檔案。不幸的是,某些(半)虛擬化系統不支援他們宣傳的整個指令集。編譯器不知道,並產生觸發此錯誤的指令。

解決方法

這些優化很有幫助,但對於擁有功能齊全的魷魚來說不是必需的,特別是在 ia64/amd64 平台上。可以透過--disable-arch-native 向配置腳本提供選項來覆寫偵測到的預設值。

(引文結束)

我們正在運行 SolarisVMware ESXi 6.0 內部。所以我想這就是原因。

我不會刪除我自己的問題,因為其他人也會遇到這個問題。

答案2

-march=native擁有 Oracle 支援合約的客戶可以從儲存庫取得在 Solaris 11.3 SRU 17 (11.3.17.5.0) 中停用該標誌的編譯後的魷魚版本/support。這包括以下修復:

  • Bug 22051233 -魷魚在 AMD 處理器上立即倒下
  • Bug 22380085 - 在 VM 內運作時出現 Squid 非法指令

答案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) 中,我會得到 coredump 錯誤行:

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

/lib/svc/method/http-squid第 23 行是啟動腳本中嘗試啟動 Squid 的行。第二個數字(本例為 1833)似乎在每次失敗時都會增加,但毫無意義。

最後,我/usr/squid/sbin/squid從舊的 Solaris 11.0 安裝中複製了 Squid 二進位(17MB 而不是 46MB),然後它似乎工作正常。這不是一個“正確”的解決方案,但如果您可以訪問舊的安裝,這肯定是一個簡單的解決方案!

相關內容