在进行性能测试时,实时监控服务器资源是非常重要的,原因如下:
评估系统瓶颈:
通过实时监控服务器的CPU、内存、磁盘I/O和网络带宽等资源使用情况,你可以发现系统的瓶颈在哪里。这有助于你了解哪些组件或服务可能成为性能问题的原因,并据此优化你的应用程序。
防止系统崩溃:
在压力测试期间,如果服务器资源消耗过高,可能会导致系统不稳定甚至崩溃。通过实时监控,你可以及时发现资源即将耗尽的情况,并采取相应的措施(如增加资源、优化代码或调整配置)来避免这种情况发生。
收集数据以分析性能:
实时监控可以提供大量的数据,这些数据可以帮助你分析系统的性能特征。例如,你可以根据CPU使用率的变化趋势来判断何时需要扩展硬件资源;也可以通过对比不同负载下的资源使用情况来评估系统的可伸缩性。
确保测试结果准确:
如果不考虑服务器资源的影响,你可能会得到错误的性能测试结果。例如,在资源不足的情况下,系统的响应时间可能会显著增加,从而影响到你的测试结论。因此,实时监控是确保测试结果准确性的关键步骤。
满足SLA要求:
对于某些高可用性和高性能要求的应用程序来说,必须保证在任何情况下都能提供良好的用户体验。实时监控服务器资源可以帮助你确保在性能测试期间符合服务水平协议(SLA)的要求。
以下是使用python 获取指定一台或多台linux服务器实时的cpu、memory、IO资源数据,并把获取到的数据插入mysql数据库指定的表的代码示例
import paramiko
import pymysql
def ssh_to_server(server, username, password):
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(server, username=username, password=password)
return client
def get_cpu_usage(client):
stdin, stdout, stderr = client.exec_command("top -bn1 | grep 'Cpu(s)' | \
sed 's/.*, *\([0-9.]*\)%* id.*/\1/' | awk '{print 100 - $1}'")
return float(stdout.read().decode().strip())
def get_memory_usage(client):
stdin, stdout, stderr = client.exec_command("free -m | awk 'NR==2{printf \"%.2f%%\", $3*100/$2 }'")
return float(stdout.read().decode().strip())
def get_disk_io_usage(client):
stdin, stdout, stderr = client.exec_command("iostat -dx 1 1 | awk '/^x/{print $(NF-2)}' | head -n 1")
return float(stdout.read().decode().strip())
if __name__ == "__main__":
servers = [
{"address": "server1.example.com", "username": "user1", "password": "pass1"},
{"address": "server2.example.com", "username": "user2", "password": "pass2"},
# 添加更多服务器...
]
db_config = {
"host": "localhost",
"port": 3306,
"user": "your_database_user",
"password": "your_database_password",
"database": "your_database_name",
}
connection = pymysql.connect(**db_config)
try:
with connection.cursor() as cursor:
for server_info in servers:
server = server_info["address"]
username = server_info["username"]
password = server_info["password"]
client = ssh_to_server(server, username, password)
cpu_usage = get_cpu_usage(client)
memory_usage = get_memory_usage(client)
disk_io_usage = get_disk_io_usage(client)
insert_query = f"INSERT INTO server_resource_data (server, cpu_usage, memory_usage, disk_io_usage) VALUES ('{server}', {cpu_usage}, {memory_usage}, {disk_io_usage})"
cursor.execute(insert_query)
print(f"Server: {server}")
print(f"CPU usage: {cpu_usage}%")
print(f"Memory usage: {memory_usage}%")
print(f"Disk IO usage: {disk_io_usage}%")
client.close()
connection.commit()
finally:
connection.close()
loucst压测代码可参考前文:python+locust电商全流程性能测试
行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群: 786229024,里面有各种测试开发资料和技术可以一起交流哦。
最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。