前段时间, 楼主所在的公司,经常发生服务器宕机,或者是服务响应超时的情况,而且公司招的运维能力不太行, 这些事情无法解决,为此还被CEO召集全员,臭骂了一段, 还制定了一些不太符合技术的考核规则,无奈之下,只能最大化的去缓解这种情况。
在领导发现服务器不行之前,把问题解决掉,这是最快也是最有效的处理方式,为此,作为程序猿的攻城狮们, 只能自己想办法去监控了,楼主就简单点,写了个监控的程序, 及时发现服务器不行了。
代码如下:
package moniter;
import java.io.BufferedReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.Date;
import example.Client;
public class Master extends Thread{
private String thisip;
private static Client client=null;
public Master(String ip){
this.thisip = ip;
}
private boolean isAlive(String ip){
boolean flag = false;
try{
String str;
BufferedReader in;
URL url = new URL("http://"+ip+"/xxx.do?_date=" + (new Date()).getTime());
URLConnection con = url.openConnection();
in = new java.io.BufferedReader(new java.io.InputStreamReader(
con.getInputStream()));
con.setConnectTimeout(2000);
con.setReadTimeout(8000);
while ((str = in.readLine()) != null) {
if (str.length() > 0) {
break;
}
}
in.close();
flag = false;
}catch(Exception ex){
flag = true;
ex.printStackTrace();
}
return flag;
}
private void keepTomcatAlive(String ip) throws Exception {
try {
//失败进行三次校验
boolean flag = isAlive(ip);
int count = 0;
if(flag){
do{
if(flag){
for(int i=0; i
flag = isAlive(ip);
if(!flag){
break;
}
count ++;
}
}
if(count > 2){
client=new Client("xxxxx”); //楼主发送短信的相关接口
int result = client.sendSMS(new String[] { "手机号码"},(new Date()).getTime() + "系统timout,请及时处理:" + ip, "", 5); //发送短信
count = 0;
}
Thread.sleep(60000); //休眠1分钟, 再次校验
}while(flag);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
private static void debug(String msg) {
}
public void run(){
while (true) {
try {
debug(this.thisip + " :Detect agin ");
keepTomcatAlive(this.thisip);
Thread.sleep(60000);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
public static void main(String[] args) {
String[] ip = {“ip:port”
};
for(int i=0; i
Master m = new Master(ip[i]);
Thread t = new Thread(m);
t.start();
}
}
}
这里用了线程的模式去跑每一个服务器, 每1分钟跑一次, 这样子,服务器的访问也不会有什么影响。但是这里有个小小问题, 就是楼主的短信服务商每分钟只能给一个号码发送3条短信,超过了就会被服务商拦截掉,哈哈,没办法, 只要收到了就去检查服务器就好了, 能把危机解决掉,如果想要更准确的, 可以发个微信文本推送之类的,这个要复杂一点,各位自己想吧。
如果想要监控到服务器的各类性能指标,楼主建议各位自己去找相应的框架去监控了,但是那样基本上是需要修改原项目的。
ps:代码比较简单, 楼主就不写注释了,有什么问题请指正!
========================啰嗦一句,关注下楼主=======================
领取专属 10元无门槛券
私享最新 技术干货