# performance_monitor
**Repository Path**: anydev/performance_monitor
## Basic Information
- **Project Name**: performance_monitor
- **Description**: 基于python的Linux服务器资源监控
- **Primary Language**: Unknown
- **License**: GPL-3.0
- **Default Branch**: main
- **Homepage**: https://www.cnblogs.com/leeyoshinari/p/17873409.html
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 1
- **Created**: 2024-10-22
- **Last Updated**: 2025-07-22
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# performace_monitor
[中文文档](https://github.com/leeyoshinari/performance_monitor/blob/main/server/static/README_zh_CN.md)
Recommend: [There is a platform that also integrates server monitor, and mainly used for performance test](https://github.com/leeyoshinari/MyPlatform), Welcome to use it.
## Introduction
#### Completed functions
1. Monitoring the CPU usage, CPU Load, IO wait, Memory, Disk IO, Network, and TCP connections of the server.
2. Monitoring the CPU usage, Context switching, Memory, Disk read and write, and TCP connections of the specified port.
3. For Java applications, monitoring size of JVM and Garbage collection; when the frequency of Full GC is too high, an email alert will be sent.
4. When the Server CPU usage is too high, or free memory is too low, an email alert will be sent; And can clear the cache automatically.
5. Start or Stop monitoring specified port at any time.
6. When the port restarts, it can automatically re-monitor.
7. Support Operational monitoring, when the port stopped, an email alert will be sent.
8. Stopping the Agent directly on the Server.
9. Monitoring data can be visualized according to the specified time period.
10. Calculate the percentiles of the CPU, Disk IO, and Network.
11. Monitoring data sampling frequency is up to about 1 time/sec, and any frequency can be set.
12. The real-time usage of server(CPU, Memory, and Disk) can be viewed directly on the page.
13. A Server can manager multiple Agents at the same time.
14. If Server is stopped, it doesn't affect the monitoring of Agent.
#### Implement
1. Framework: `aiohttp`.
2. Template rendering: `jinja2`.
3. Visualization: `echarts`.
4. Thread pool and queue to monitor.
5. Database: `InfluxDB`.
6. In order to ensure the accuracy of the monitoring data, use Linux's commands to get data directly, and there is no curve fitting during visualization.
## Usage
1. Clone performance_monitor
```shell
git clone https://github.com/leeyoshinari/performance_monitor.git
```
The server folder is the Server, and only one needs to be deployed; the agent folder is Agent, and deployed on the servers that need to be monitored.
2. Deploy `InfluxDB2`, the latest version is recommended.
3. Respectively modify the configuration files `config.ini` in the server and agent folders.
4. Install packages
```shell
pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
```
5. Check the version of `sysstat`. Respectively use commands `iostat -V` and `pidstat -V`, the version of `12.4.0` has been tested, if not, please [click me](http://sebastien.godard.pagesperso-orange.fr/download.html) to download it.
6. Respectively run `server.py` in server and agent folders.
```shell
nohup python3 server.py &
```
7. Visit pages
(1) After Agent is started, visit `http://ip:port`, you can see the server's data(CPU, Meeory, Disk, Network, etc.).

(2) After server is started, visit `http://ip:port/'context'`, you can see some informations about Agents.

(3) Click MonitorList tab to see the monitoring page. Select server and enter the port, then click the startMonitor button to start monitoring the port on the selected server; click the stopMonitor button to stop monitoring the port on the selected server.

(4) Click Visualize tab to see the visualization page. Select server, type, disk, startTime and endTime, then click the Visualize button to visualize the monitoring data.

## Package
Using `pyinstaller` to package python code. After packaging, it can be quickly deployed agent on other Agents without installing python3.7+ and third-party packages.
Before packaging, you must ensure that the python code can run normally.
1. Package server
(1) Enter the server folder, run:
```
pyinstaller -F server.py -p draw_performance.py -p config.py -p Email.py -p logger.py -p process.py -p request.py -p __init__.py --hidden-import draw_performance --hidden-import config --hidden-import logger --hidden-import Email --hidden-import process --hidden-import request
```
(2) Enter `dist` folder, find the executable file `server`,
(3) Copy `config.ini` to the `dist` folder,
(4) Copy `templates` and `static` to the `dist` folder,
(5) Start server
```shell
nohup ./server &
```
2. Package agent
(1) Enter agent folder, run:
```shell
pyinstaller -F server.py -p performance_monitor.py -p logger.py -p config.py -p common.py -p __init__.py --hidden-import logger --hidden-import performance_monitor --hidden-import common --hidden-import config
```
(2) Enter `dist` folder, find the executable file `server`,
(3) Copy `config.ini` to the `dist` folder,
(4) Copy the `dist` folder to other servers, and start server
```shell
nohup ./server &
```
NOTE: Since the `agent` needs to run on the server to be monitored, the executable file packaged on the server of the CentOS system X86 architecture can only run on the server of the CentOS system X86 architecture; servers of other system and architecture need to be repackaged `agent`.
## Note
1. The server must support the following commands: `ps`, `jstat`, `iostat`, `pidstat` and `netstat`, if not, please install them.
2. The network card of server must be in full duplex mode, if not, the network usage will be incorrect.
3. The version of sysstat must be 12+, the 12 version has been tested, other versions have not been tested, and using old version may cause data abnormalities; please [click me](http://sebastien.godard.pagesperso-orange.fr/download.html) to download the latest version.
4. The code can be run on almost any linux system that can run python. The tested systems have `CentOS`, `Ubuntu`, `KylinOS`, `NeoKylin`, support `X86_64` and `ARM` architecture.