1. 如何查看伺服器當前的負載信息
方法一:
通過top命令來查看伺服器負載
再對此linux伺服器性能分析之前,先了解下Linux系統Load average負載的知識,負載均值在 uptime 或者top 命令中可以看到,
方法二:輸入 iostat -x -k -t
說明:%util: 一秒中有百分之多少的時間用於 I/O 操作,或者說一秒中有多少時間 I/O 隊列是非空的。
即 delta(use)/s/1000 (因為use的單位為毫秒)
如果 %util 接近 100%,說明產生的I/O請求太多,I/O系統已經滿負荷,該磁碟可能存在瓶頸。
方法三:
如果玩游戲很卡,可以用hdparm –t /dev/磁碟名稱來測試磁碟性能是否達標,下圖是單個希捷1T的盤測試的結果
說明:sd表示硬碟是SATA,SCSI或者SAS,a表示串口的第一塊硬碟
2. 如何計算WEB伺服器的最大負載量
圖1顯示了該演算法的工作環境,在負載調度器上運行Monitor Daemon進程,Monitor Daemon來監視和收集各個伺服器的負載信息。Monitor Daemon可根據多個負載信息算出一個綜合負載值。Monitor Daemon將各個伺服器的綜合負載值和當前權值算出一組新的權值,若新權值和當前權值的差值大於設定的閥值,Monitor Daemon將該伺服器的權值設置到內核中的IPVS調度中,而在內核中連接調度一般採用加權輪叫調度演算法或者加權最小連接調度演算法。圖1:動態反饋負載均衡演算法的工作環境連接調度當客戶通過TCP連接訪問網路訪問時,服務所需的時間和所要消耗的計算資源是千差萬別的,它依賴於很多因素。例如,它依賴於請求的服務類型、當前網路帶寬的情況、以及當前伺服器資源利用的情況。一些負載比較重的請求需要進行計算密集的查詢、資料庫訪問、很長響應數據流;而負載比較輕的請求往往只需要讀一個HTML頁面或者進行很簡單的計算。請求處理時間的千差萬別可能會導致伺服器利用的傾斜(Skew),即伺服器間的負載不平衡。例如,有一個WEB頁面有A、B、C和D文件,其中D是大圖像文件,瀏覽器需要建立四個連接來取這些文件。當多個用戶通過瀏覽器同時訪問該頁面時,最極端的情況是所有D文件的請求被發到同一台伺服器。所以說,有可能存在這樣情況,有些伺服器已經超負荷運行,而其他伺服器基本是閑置著。同時,有些伺服器已經忙不過來,有很長的請求隊列,還不斷地收到新的請求。反過來說,這會導致客戶長時間的等待,覺得系統的服務質量差。簡單連接調度簡單連接調度可能會使得伺服器傾斜的發生。在上面的例子中,若採用輪叫調度演算法,且集群中正好有四台伺服器,必有一台伺服器總是收到D文件的請求。這種調度策略會導致整個系統資源的低利用率,因為有些資源被用盡導致客戶的長時間等待,而其他資源空閑著。實際TCP/IP流量的特徵文獻說明網路流量是呈波浪型發生的,在一段較長時間的小流量後,會有一段大流量的訪問,然後是小流量,這樣跟波浪一樣周期性地發生。文獻揭示在WAN和LAN上網路流量存在自相似的特徵,在WEB訪問流也存在自相似性。
3. nginx做反向代理負載均衡 java怎麼獲取後端伺服器獲取用戶IP
/**
*獲取訪問者IP地址
*<p>在一般情況下使用Request.getRemoteAddr()即可,但是經過nginx等反向代理軟體後,這個方法會失效。</p>
*<p>本方法先從Header中獲取X-Real-IP,如果不存在再從X-Forwarded-For獲得第一個IP(用,分割)。</p>
*<p>如果還不存在則調用Request.getRemoteAddr()。</p>
*@paramrequest
*@return
*/
publicstaticStringgetIp(HttpServletRequestrequest){
Stringip=request.getHeader("X-Real-IP");
if(ValidateUtil.isNotEmpty(ip)&&!"unknown".equalsIgnoreCase(ip)){
returnip;
}
ip=request.getHeader("X-Forwarded-For");
if(ValidateUtil.isNotEmpty(ip)&&!"unknown".equalsIgnoreCase(ip)){
intindex=ip.indexOf(",");
if(index!=-1){
returnip.substring(0,index);
}else{
returnip;
}
}else{
returnrequest.getRemoteAddr();
}
}
4. 如何在Java程序中獲取、監控伺服器負載值、CPU、內存、硬碟、網路情況
SUM伺服器監控軟體吧
可以監控所有品牌的伺服器的CPU\內存、磁碟、流量、網路、資料庫、中間件,還能監控網路設備
有啥情況可以簡訊和郵件通知,比較方便
你看看吧,我們用的就是這個,只是溫度不能監控,其他都可以
5. JAVA如何編寫伺服器壓力測試軟體
選我吧。。絕對短小精悍!
思路:
壓力測試原理有兩種,一種是連接測試,一種是負載測試
1,連接測試,就是多線程,不停的請求直到伺服器死機或達到預期效果即可!
2,負載測試,就是一個線程的多步操作,每個線程佔用伺服器cpu 內存是否符合節能高效的標准,如果不是,那就優化吧
所有測試以額定用戶(最大用戶)為基礎
6. java 怎麼查看伺服器的CPU使用率
1、確定當前系統安裝的jdk是1.6版本以上
2、windows系統中有獲取cpu使用率的可執行文件exe,只要在java中獲取該文件的執行路徑,通過Java調用即可。
3、獲取操作系統可執行文件目錄procCmd
4、調用java的Runtime.getRuntime().exec執行cmd應用程序
5、利用java中sleep來計算睡眠前後cpu的忙碌時間與空閑時間,因為sleep不會釋放系統資源
6、根據忙碌時間占總時間的比例來計算cpu使用率!
7. Java web項目,怎麼做負載均衡啊
HAProxy是一款反向代理伺服器工具,通過它,可以實現負載均衡。它支持雙機熱備支持虛擬主機,但其配置簡單,擁有非常不錯的伺服器健康檢查功能,當其代理的後端伺服器出現故障, HAProxy會自動將該伺服器摘除,故障恢復後再自動將該伺服器加入。新的1.3引入了frontend,backend,frontend根據任意HTTP請求頭內容做規則匹配,然後把請求定向到相關的backend.
利用HAPorxy實現負載均衡
1. 利用HAProxy實現負載均衡
192.168.169.137 (haproxy)———負載均衡———-(192.168.169.117;192.168.169.118)
安裝配置HAproxy
cd /usr/local/
wget http://haproxy.1wt.eu/download/1.3/src/haproxy-1.3.14.2.tar.gz
tar zxvf haproxy-1.3.14.2.tar.gz
mv haproxy-1.3.14.2 haproxy
cd haproxy
make TARGET=linux26
2. 創建配置文件
# vi haproxy.cfg
global
maxconn 5120
chroot /usr/local/haproxy
uid 99
gid 99
daemon
quiet
nbproc 2 #通過nbproc多設置幾個haproxy並發進程,這樣每個進程的task_queue相對就會短很多,性能自然就能提高不少
#pidfile /var/run/haproxy-private.pid
defaults
log global
mode http
option httplog
option dontlognull
log 127.0.0.1 local3
retries 3
option redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen webfarm 0.0.0.0:80
mode http
stats uri /haproxy-stats #監控haproxy狀態
stats realm Haproxy\ statistics
stats auth netseek:52netseek #設置狀態監控的用戶名為netseek密碼為52netseek
balance roundrobin #負載均衡演算法
cookie SERVERID insert indirect
option httpclose #
option forwardfor #apache日誌轉發功能
option httpchk HEAD /check.txt HTTP/1.0 #健康檢測
server app_bbs1 192.168.169.117:80 cookie app1inst1 check inter 2000 rise 2 fall 5
server app_bbs2 192.168.169.118:80 cookie app1inst2 check inter 2000 rise 2 fall 5
syslog.conf里加一行
local3.* /var/log/haproxy.log
# touch /var/log/haproxy.log
# chown haproxy:haproxy /var/log/haproxy.log
# chmod u+x /var/log/haproxy.log
# tail –f /var/log/harpoxy.log 監控日誌
# ./haproxy -f haproxy.cfg 啟動服務.
監控狀態圖示http://192.168.169.137/haproxy-stats ,輸入用戶名密碼查看狀態。
後端apache日誌處理
配置httpd.conf
LogFormat 「%{X-Forwarded-For}i %l %u %t \」%r\」 %>s %b 」 combined
CustomLog /var/log/httpd/access_log combined
虛擬主機不記錄檢測日誌:
SetEnvIf Request_URI 「^/check\.txt$」 dontlog
LogLevel warn
ErrorLog /var/log/httpd/vhost_error.log
CustomLog /var/log/httpd/vhost_access.log combined env=!dontlog
相關介紹
#./haproxy –help //haproxy相關命令參數介紹.
haproxy -f <配置文件> [-n 最大並發連接總數] [-N 每個偵聽的最大並發數] [-d] [-D] [-q] [-V] [-c] [-p <pid文件>] [-s] [-l] [-dk]
[-ds] [-de] [-dp] [-db] [-m <內存限制M>] [{-sf|-st} pidlist...]
-d 前台,debug模式
-D daemon模式啟動
-q 安靜模式,不輸出信息
-V 詳細模式
-c 對配置文件進行語法檢查
-s 顯示統計數據
-l 顯示詳細統計數據
-dk 不使用kqueue
-ds 不使用speculative epoll
-de 不使用epoll
-dp 不使用poll
-db 禁用後台模式,程序跑在前台
-sf <pidlist>
程序啟動後向pidlist里的進程發送FINISH信號,這個參數放在命令行的最後
-st <pidlist>
程序啟動後向pidlist里的進程發送TERMINATE信號,這個參數放在命令行的最後
8. Java獲取伺服器磁碟負載率
1、在遠程server里搭建一個http服務,並支持某種服務端語言(如.net或php之類)
2、用服務端語言獲取到伺服器的磁碟信息,把結果輸出
3、在本地用JS寫一段AJAX腳本,遠程請求服務端寫好的程序,得到結果,並展示給用戶
<html>
<head>
<title>提取硬碟序列號</title>
<script>
function disk() {//硬碟序列號 信息
var locator = new ActiveXObject ("WbemScripting.SWbemLocator");
var service = locator.ConnectServer(".");
var properties = service.ExecQuery("SELECT * FROM Win32_DiskDrive");
var e = new Enumerator (properties);
document.write("<table border=1>");
for (;!e.atEnd();e.moveNext ())
{
var p = e.item ();
document.write("<tr>");
document.write("<td>" + p.signature + "</td>");
document.write("</tr>");
}
document.write("</table>");
}
</script>
</head>
<body>
<input type="button" value="硬碟序列號" onclick="disk()">
</body>
</html>
在這上找的代碼:
對於寫過ASP或.net 的人來說,通過asp或.net 語言來獲得客戶端的硬體信息是很熟悉的.但如何通過javascript這種客戶端腳本來獲得客戶端的信息呢?請看以下實例:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>javascript獲得客戶端硬體信息-www.web2bar.cn/</title>
<meta name="GENERATOR" content="Microsoft Visual Studio .NET
7.1">
<meta name="vs_targetSchema"
content="http://schemas.microsoft.com/intellisense/ie5">
<script id=clientEventHandlersJS language=javascript>
<!--
function Button2_onclick() {//CPU 信息
var locator = new ActiveXObject ("WbemScripting.SWbemLocator");
var service = locator.ConnectServer(".");
var properties = service.ExecQuery("SELECT * FROM Win32_Processor");
var e = new Enumerator (properties);
document.write("<table border=1>");
for (;!e.atEnd();e.moveNext ())
{
var p = e.item ();
document.write("<tr>");
document.write("<td>" + p.Caption + "</td>");
document.write("<td>" + p.DeviceID + "</td>");
document.write("<td>" + p.Name + "</td>");
document.write("<td>" + p.CpuStatus + "</td>");
document.write("<td>" + p.Availability + "</td>");
document.write("<td>" + p.Level + "</td>");
document.write("<td>" + p.ProcessorID + "</td>");
document.write("<td>" + p.SystemName + "</td>");
document.write("<td>" + p.ProcessorType + "</td>");
document.write("</tr>");
}
document.write("</table>");
}
function Button1_onclick() {//軟盤信息
var locator = new ActiveXObject ("WbemScripting.SWbemLocator");
var service = locator.ConnectServer(".");
var properties = service.ExecQuery("SELECT * FROM Win32_FloppyDrive");
var e = new Enumerator (properties);
document.write("<table border=1>");
for (;!e.atEnd();e.moveNext ())
{
var p = e.item ();
document.write("<tr>");
document.write("<td>" + p.Description + "</td>");
document.write("<td>" + p.DeviceID + "</td>");
document.write("<td>" + p.Status + "</td>");
document.write("<td>" + p.Manufacuturer + "</td>");
document.write("</tr>");
}
document.write("</table>");
}
function Button1_onclick() {//CD-ROM 信息
var locator = new ActiveXObject ("WbemScripting.SWbemLocator");
var service = locator.ConnectServer(".");
var properties = service.ExecQuery("SELECT * FROM Win32_CDROMDrive");
var e = new Enumerator (properties);
document.write("<table border=1>");
for (;!e.atEnd();e.moveNext ())
{
var p = e.item ();
document.write("<tr>");
document.write("<td>" + p.Caption + "</td>");
document.write("<td>" + p.Description + "</td>");
document.write("<td>" + p.Drive + "</td>");
document.write("<td>" + p.Status + "</td>");
document.write("<td>" + p.MediaLoaded + "</td>");
document.write("</tr>");
}
document.write("</table>");
}
function Button1_onclick() {//鍵盤信息
var locator = new ActiveXObject ("WbemScripting.SWbemLocator");
var service = locator.ConnectServer(".");
var properties = service.ExecQuery("SELECT * FROM Win32_Keyboard");
var e = new Enumerator (properties);
document.write("<table border=1>");
for (;!e.atEnd();e.moveNext ())
{
var p = e.item ();
document.write("<tr>");
document.write("<td>" + p.Description + "</td>");
document.write("<td>" + p.Name + "</td>");
document.write("<td>" + p.Status + "</td>");
document.write("</tr>");
}
document.write("</table>");
}
function Button1_onclick() {//主板信息
var locator = new ActiveXObject ("WbemScripting.SWbemLocator");
var service = locator.ConnectServer(".");
var properties = service.ExecQuery("SELECT * FROM Win32_BaseBoard");
var e = new Enumerator (properties);
document.write("<table border=1>");
for (;!e.atEnd();e.moveNext ())
{
var p = e.item ();
document.write("<tr>");
document.write("<td>" + p.HostingBoard + "</td>");
document.write("<td>" + p.Manufacturer + "</td>");
document.write("<td>" + p.PoweredOn + "</td>");
document.write("<td>" + p.Proct + "</td>");
document.write("<td>" + p.SerialNumber + "</td>");
document.write("<td>" + p.Version + "</td>");
document.write("</tr>");
}
document.write("</table>");
}
//-->
</script>
</head>
<body>
<INPUT id="Button1" type="button" value="Button"
name="Button1" language=javascript onclick="return Button1_onclick()">
</body>
</html>
使用javascript方式獲得客戶端的信息主要的優點是,不需求伺服器資源.不需求刷新網頁.直接在客戶端執行腳本獲得顯示.
在這上找到了硬碟序列號的參數:
\'獲得硬碟序列號
Dim cmicWmi As New System.Management.ManagementObjectSearcher(\"SELECT * FROM Win32_DiskDrive\")
Dim Uint32 As UInt32
For Each cmicWmiObj As ManagementObject In cmicWmi.Get
Uint32 = cmicWmiObj(\"signature\")
Next
TextBox1.Text = Uint32.ToString
9. java 如何查看伺服器的CPU使用率
(){
try{
StringprocCmd=System.getenv("windir")+"\system32\wbem\wmic.exeprocessgetCaption,CommandLine,KernelModeTime,ReadOperationCount,ThreadCount,UserModeTime,WriteOperationCount";
//取進程信息
long[]c0=readCpu(Runtime.getRuntime().exec(procCmd));
Thread.sleep(CPUTIME);
long[]c1=readCpu(Runtime.getRuntime().exec(procCmd));
if(c0!=null&&c1!=null){
longidletime=c1[0]-c0[0];
longbusytime=c1[1]-c0[1];
return"CPU使用率:"+Double.valueOf(PERCENT*(busytime)*1.0/(busytime+idletime)).intValue()+"%";
}else{
return"CPU使用率:"+0+"%";
}
}catch(Exceptionex){
ex.printStackTrace();
return"CPU使用率:"+0+"%";
}
}