我需要找到一種方法來檢測網站(joseki終點)是否過載。 http://128.250.202.125:7001/joseki/oracle
總是起來,但是當我提交查詢時,有時候它是空閒的。 (即過載,而不是下降)如何檢測網站是否超載?
我到目前爲止的做法是使用curl來模擬表單提交。如果curl_exec返回false,我知道該網站已超載。
主要問題是我不確定網站重載是否觸發'FALSE return'。 我可以使用這個method登錄curl_exec的回報,但這個網站正在關閉。
<?php
$is_run = true;
if($is_run) {
$url = "http://128.250.202.125:7001/joseki/oracle";
$the_query = "
PREFIX dc: <http://purl.org/dc/elements/1.1/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX fn: <http://www.w3.org/2005/xpath-functions#>
PREFIX ouext: <http://oracle.com/semtech/jena-adaptor/ext/user-def-function#>
PREFIX oext: <http://oracle.com/semtech/jena-adaptor/ext/function#>
PREFIX ORACLE_SEM_FS_NS: <http://oracle.com/semtech#timeout=100,qid=123>
SELECT ?sc ?c
WHERE
{ ?sc rdfs:subClassOf ?c}
";
// Simulate form submission.
$postdata = http_build_query(array('query' => $the_query));
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$tmp_condi = curl_exec($curl);
// After I submit a simulated form submission, and http://128.250.202.125:7001/joseki/oracle is
// not responding (i.g. idling), does it definitely returns FALSE????
if($tmp_condi === FALSE) {
die('not responding');
}
else {
}
curl_close($curl);
}
解決方案
能夠通過將下面來解決這個問題,在此基礎上:Setting Curl's Timeout in PHP
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT ,0);
curl_setopt($ch, CURLOPT_TIMEOUT, 400); //timeout in seconds
你可以在curl_exec後面使用'curl_error($ curl)'來查看是否發生錯誤。 – Asenar 2014-10-10 00:03:30
@Asenar我已經將日誌記錄到代碼中,並且我正在等待該網站停止運行。你有沒有看到任何網站沒有響應,curl_exec返回false? – kenpeter 2014-10-10 00:19:31