無法在 CentOS 5 上啟動 Glassfish 伺服器:埠據說正在使用中,但實際上並沒有
我有一個 CentOS 5 伺服器,我打算在上面試驗 Glassfish。伺服器已啟動並正在執行,我可以通過 ssh 訪問它並擁有 root 訪問權限。
所以我安裝了 Glassfish:我點擊了Oracle GlassFish 下載站點上的這個連結並下載了安裝程序文件。然後我以 . 身份登錄到伺服器,執行安裝程序文件,選擇典型安裝,並將幾乎所有選項都保留為預設值,除了我設置為的安裝目錄。
java_ee_sdk-6u4-jdk-linux-x64.sh``ssh -X``root``/opt/glassfish
安裝本身執行良好,只是安裝成功後無法啟動域。它給了我與我現在嘗試手動啟動域時相同的錯誤消息:
# /opt/glassfish/bin/asadmin start-domain There is a process already using the admin port 4848 -- it probably is another instance of a GlassFish server. Command start-domain failed. # /opt/glassfish/bin/asadmin restart-domain Server is not running, will attempt to start it... There is a process already using the admin port 4848 -- it probably is another instance of a GlassFish server. Command restart-domain failed.
但是,埠 4848 上沒有執行任何程序!
# netstat -tulpn | grep 4848 # /sbin/fuser 4848/tcp # /usr/sbin/lsof -i :4848 # grep 4848 /etc/services appserv-http 4848/tcp # App Server - Admin HTTP appserv-http 4848/udp # App Server - Admin HTTP
從我自己的電腦:
# nmap -P0 my-experimentation-server Starting Nmap 6.40 ( http://nmap.org ) at 2014-01-13 12:37 CET Nmap scan report for mbpc09.cs.uni-saarland.de (134.96.225.191) Host is up (0.018s latency). Not shown: 997 filtered ports PORT STATE SERVICE 22/tcp open ssh 631/tcp closed ipp 2222/tcp closed EtherNet/IP-1 Nmap done: 1 IP address (1 host up) scanned in 11.84 seconds
可以肯定的是,我完全解除安裝了 Glassfish,清除了
/opt/glassfish
,然後重新安裝了它,但這次我將管理埠配置為12345
. 結果相同,它告訴我已經有一個程序在 port 上執行12345
。除了沒有。在任何時候我都無法到達http://my-experimentation-server:4848
,resp。http://my-experimentation-server:12345
.有什麼建議麼?
更新:
- 在埠 80 上的 my-experimentation-server 上啟動 Apache 伺服器工作正常,我可以從自己的 PC 訪問伺服器。
- 在我的實驗伺服器上,我發出了
nc -l 4848
在埠 4848 上以偵聽模式打開 TCP 套接字的命令。這行得通!然後,我可以在我自己的 PC 上使用nc my-experimentation-server 4848
它在兩台電腦之間來回傳輸消息。因此,埠4848
不會被另一個程序阻止,也不會被防火牆過濾,或者其他什麼。這絕對是一個 Glassfish 問題。
我終於解決了這個問題。
問題是作業系統中配置的主機名與我們公司的 DNS 伺服器已知的實際主機名不匹配,而是與其他一些伺服器的主機名匹配。
更準確地說,在我試圖啟動 Glassfish 的 CentOS 伺服器上,該命令
hostname
將輸出(域名已更改):# hostname mbpc05.my-domain.com
但是,
mbpc05.my-domain.com
它是我們公司內另一台完全不同的伺服器。我們公司的 DNS 伺服器知道我的 CentOS 伺服器的實際主機名是
mbpc09.my-domain.com
(即9
,不是5
!)。所以,我在我的 CentOS 伺服器上發出了以下命令(as
root
)來更改主機名:# hostname mbpc09.my-domain.com
那解決了它。之後,我可以毫無問題地啟動 Glassfish 伺服器。
我假設發生的事情是 Glassfish 伺服器從作業系統中檢索了本地主機名,然後嘗試在該主機上啟動伺服器 - 但由於該主機名屬於完全不同的伺服器,它會嘗試啟動 Glassfish 伺服器實例遠端伺服器,或類似的東西。這當然失敗了。Glassfish 輸出的錯誤消息非常令人困惑,與實際問題無關(我預計 Java 程式碼中會引發一些異常,然後輸出該消息 - 錯誤處理可能更準確),這就是為什麼我花了一些時間來解決它。:)