一、JMeter監控伺服器資源簡介
JMeter是一個開源的Java應用程序,主要用於完整的性能測試、功能測試和負載測試。在jmeter性能測試中,我們強烈建議通過監測資源利用情況,來收集關於系統性能瓶頸分析的指標。
二、JMeter監控伺服器資源的實現
1.自定義插件
自定義插件是JMeter官方提供的一種插件擴展機制,使用自定義插件可以為JMeter新增自己想要的監控器和聚類器等組件。它使用Java語言編寫, 插件可以使用Java API, 從而提供更多的機會來擴展JMeter。
雖然自定義監視器通常需要更複雜的代碼,但它可以輕鬆地將信息存儲到日誌文件或資料庫中,或者將它們顯示在GUI控制面板中。
2.通過命令行方式獲取資源利用率
可以通過在命令行運行JMeter時,使用jconsole和JVM參數(如 jmxremote.port=埠)的方式連接jconsole,獲取伺服器資源利用率信息。
例如,在命令行中啟動JMeter:
jmeter -JREMOTE_HOSTS=yourServer -JREMOTE_HOST_PORT=portnumber -JREMOTE_HOST_USER=user -JREMOTE_HOST_PASSWORD=password -JREMOTE_ENABLE=true
3.使用容器化技術進行監控
在容器化架構中,Docker和Kubernetes是最常見的技術。我們可以使用Docker和Kubernetes來監測容器和集群資源的利用情況。
Docker可以使用命令”docker stats”來獲取容器的資源利用率信息。而在Kubernetes中,有一些工具可以用於監控容器和集群,例如:Prometheus,Grafana,InfluxDB等。
三、JMeter監控伺服器資源的使用場景
1.系統性能調優
利用JMeter監控伺服器資源,可以幫助系統管理員更好地了解系統瓶頸所在,以及找到優化系統性能、提高系統吞吐量的途徑。
2.被動負載測試
當一個系統在運行時,我們可以利用JMeter配合監控器來進行被動負載測試。這種被動負載測試的好處是能夠讓我們對系統在運行狀態下的瓶頸分析,從而得到系統可擴展性和系統運行狀態下的性能指標。
3.主動負載測試
在負載測試中,我們可以使用JMeter監控伺服器資源,統計請求發出時的一系列指標,包括請求響應時間、並發用戶數、伺服器負載、系統資源等等。根據這些指標,我們可以通過JMeter本身的聚合器和監視器等組件進行圖表化展示,比較直觀地評估系統性能和可靠性。
四、代碼示例
JMeter自定義插件示例
下面是一個簡單的示例,演示了如何使用JMeter的自定義插件來獲得Web伺服器的負載信息,並將其顯示在控制面板中:
import org.apache.jmeter.samplers.SampleSaveConfiguration;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jmeter.samplers.Sampler;
import org.apache.jmeter.visualizers.gui.AbstractVisualizer;
import org.apache.jorphan.logging.LoggingManager;
import org.apache.log.Logger;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.util.Vector;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class ResourceMonitorVisualizer extends AbstractVisualizer {
private static final long serialVersionUID = 240L;
private static final Logger log = LoggingManager.getLoggerForClass();
private JTextField throughputField;
private JTextField cpuField;
private JTextField memoryField;
private JTextField threadsField;
public ResourceMonitorVisualizer() {
setLayout(new BorderLayout(0, 5));
setBorder(makeBorder());
add(makeTitlePanel(), BorderLayout.NORTH);
JPanel displayPanel = new JPanel(new GridLayout(4, 2));
displayPanel.setPreferredSize(new Dimension(320, 120));
displayPanel.add(new JLabel("Throughput (requests/second)"));
throughputField = new JTextField(10);
throughputField.setEditable(false);
displayPanel.add(throughputField);
displayPanel.add(new JLabel("CPU (% used by JMeter)"));
cpuField = new JTextField(10);
cpuField.setEditable(false);
displayPanel.add(cpuField);
displayPanel.add(new JLabel("Memory (MB used by JMeter)"));
memoryField = new JTextField(10);
memoryField.setEditable(false);
displayPanel.add(memoryField);
displayPanel.add(new JLabel("Active Threads"));
threadsField = new JTextField(10);
threadsField.setEditable(false);
displayPanel.add(threadsField);
add(displayPanel, BorderLayout.CENTER);
JPanel buttonPanel = new JPanel(new FlowLayout());
add(buttonPanel, BorderLayout.SOUTH);
}
public void add(SampleResult sample) {
SampleSaveConfiguration ssc = getSaveConfig();
Vector為JMeter監控器添加命令行參數
可以使用以下命令在監控伺服器資源時啟用JMeter監視器:
jmeter -JREMOTE_HOSTS=yourServer -JREMOTE_HOST_PORT=portnumber -JREMOTE_HOST_USER=user -JREMOTE_HOST_PASSWORD=password -JREMOTE_ENABLE=true
Docker中檢查容器的資源利用率
使用”docker stats”命令可以查看Docker容器的資源利用率:
docker stats container_name
Kubernetes中使用Prometheus監控資源使用率
使用Prometheus來監控Kubernetes集群資源利用率。Prometheus是一種度量工具,可以存儲、檢索和可視化數據。
首先,需要在Kubernetes上安裝Prometheus Operator。然後,Kubernetes集群上的每個Pod都需要將指標發送給Prometheus。指標可以是CPU利用率、內存利用率等等。
數據流轉鏈路為:Kubernetes活動 -> Prometheus數據抓取器 -> 網路傳輸 -> Prometheus -> Grafana。
apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: myservice-monitor spec: selector: matchLabels: app: myservice endpoints: - port: myservice-port
原創文章,作者:NCLCR,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/370568.html
微信掃一掃
支付寶掃一掃