tnsping,作為oracle連線測試的乙個小巧的工具,其實大家已經不陌生了,但是使用tnsping有乙個問題,就是連線超時,當然這個和網路的安全策略等密不可分,但是擺在我面前的乙個問題是,現在有大量的伺服器,每台資料庫伺服器上都有tnsnames.ora,如果需要判斷tnsnames.ora裡面的配置是否生效,使用tnsping是乙個很自然的選擇。
我也這麼做了,我寫了乙個命令去解析tnsnames.ora 然後把裡面的連線物件給標示出來。
cat tnsnames.ora|awk ''|grep -iv 'address\|address_list\|connect_data\|service_name\|sid\|server\|)'|sed 's/=(description//g'|grep -v 'description\|#'|awk -f= ''|sed '/^$/d' |grep -v \(
命令的輸出結果類似:
db133_95
csvip
testdb
我在這個基礎上就可以使用tnsping來判斷了。
但是剛開始我就發現這麼做還是有乙個隱患,那就是不可避免的連線超時問題。我們可以簡單測試一下,看看預設的超時時長是多少?
$ time tnsping db84
tns ping utility for linux: version 11.2.0.3.0 - production on 18-may-2016 22:17:53
used parameter files:
used tnsnames adapter to resolve the alias
attempting to contact (description = (address = (protocol = tcp)(host = 10.11.17.84)(port = 1528)) (connect_data = (service_name = sol)))
tns-12535: tns:operation timed out
real 1m0.011s
user 0m0.006s
sys 0m0.004s
通過time可以馬上定位出超時時長是1分鐘。
那麼對於很多執行已久,業務依賴性較高的系統,tnsnames.ora裡面的連線物件就非常多了,這個時候如果使用tnsping的方式那就很容易超時,假設裡面有100個連線物件,如果存在30個無效連線物件,那就需要30分鐘,如果有多台伺服器,那就不用幹其他的活了。
對於tnsping,這個命令也沒有提供更多的使用選項,所以目前來看還無法指定超時時長。
$ tnsping --help
tns ping utility for linux: version 11.2.0.3.0 - production on 18-may-2016 18:03:15
used parameter files:
tns-03505: failed to resolve name
$ tnsping -h
tns ping utility for linux: version 11.2.0.3.0 - production on 18-may-2016 18:03:19
used parameter files:
tns-03505: failed to resolve name
這個還是依賴於系統級,那麼我們把tnsping先放一放。看看還有沒有其它的實現方式,乙個很自然的實現方式就是telnet
一般測試連通性,我們可以使用telnet 伺服器ip 埠的方式。下面是乙個測試成功的案例。
$ telnet 10.11.65.111 1528
trying 10.11.65.111...
connected to 10.11.65.111.
escape character is '^]'.
connection closed by foreign host.
對於連通性問題的場景,telnet貌似也沒有相應的超時選項。
所以使用telnet的方式和tnsping的效果差不多。
那麼還有什麼方式呢,這個時候我們可以好好想想還有那些系統級的工具可以滿足要求,netcat就是乙個不錯的選擇。
所以想到了,我二話沒說,就開始了測試。nc的乙個亮點就是可以指定超時時長,比如我們設定為5秒,超時就顯示連線失敗
$ echo quit | nc -w 5 -v 10.11.65.111 1521
connection to 10.11.65.111 1521 port [tcp/ncube-lm] succeeded!
$ echo quit | nc -w 5 -v 10.11.65.116 1521
nc: connect to 10.11.65.116 port 1521 (tcp) failed: no route to host
看來有了相應的解決思路,tnsping連線超時的問題就可以變通解決了。
CXF 連線超時與請求超時的設定
主要在客戶端呼叫時設定 在編譯 執行是沒問題的,但測試發現如果服務端沒有啟動或網路環境差,cxf會預設等待一定的時間 則有了客戶端呼叫超時的設定 方式 1 在 中設定超時 這是命令生成的類,該類的例項可當成工廠來使用 cxfetcvremindinfoserviceimpl factory new ...
SSH連線Linux的Server超時
etc ssh sshd config 找到 clientaliveinterval 數值是秒,比如你設定為300,就是5分鐘.clientaliveinterval 300 clientalivecountmax 指如果發現客戶端沒有相應,則判斷一次超時,這個引數設定允許超時的次數。比如5 cli...
處理http連線超時的方法
宣告乙個boolean公共變數,表明當前httpconnection是否得到伺服器回應。你的連線線程中在連線之前置這個變數為false 另起乙個監視執行緒,拿到那個httpconnection的連線物件,並迴圈監視這個boolean公共變數。如果指定時間內 20秒後 你的boolean公共變數還是f...