paramiko 获取 linux 内存利用率

要使用 paramiko 模块在Python中获取Linux服务器的内存利用率,你需要首先通过SSH连接到服务器,然后执行Linux命令来获取内存使用情况。以下是一种常见的方法来获取和计算内存利用率。

步骤 1: 安装 Paramiko
确保你的环境中已经安装了 paramiko。如果未安装,可以通过pip安装:

pip install paramiko

步骤 2: 使用 Paramiko 连接到服务器
接下来,使用 paramiko 连接到你的Linux服务器。

步骤 3: 执行命令获取内存信息
你可以使用 free 命令来获取内存信息。

步骤 4: 解析命令输出并计算内存利用率
下面是一个示例代码,展示如何实现上述步骤:

import paramiko
 
def get_memory_usage(hostname, port=22, username='your_username', password='your_password'):
    # 创建SSH对象
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(hostname, port, username, password)
    
    # 执行命令获取内存信息
    stdin, stdout, stderr = ssh.exec_command('free -m')
    output = stdout.read().decode()
    
    # 关闭连接
    ssh.close()
    
    # 解析输出
    lines = output.split('\n')
    mem_info = lines[1].split()[1:]  # 第二行,忽略第一列('total')
    total_mem = int(mem_info[0])  # 总内存(MB)
    used_mem = int(mem_info[1])  # 已用内存(MB)
    free_mem = int(mem_info[3])  # 空闲内存(MB)
    available_mem = int(mem_info[6]) if len(mem_info) > 6 else used_mem  # 可用内存(MB),某些版本free输出不同
    
    # 计算内存利用率
    memory_usage = (used_mem / total_mem) * 100
    memory_free = (free_mem / total_mem) * 100
    memory_available = (available_mem / total_mem) * 100
    
    return {
        'total': total_mem,
        'used': used_mem,
        'free': free_mem,
        'available': available_mem,
        'usage': memory_usage,
        'free_percentage': memory_free,
        'available_percentage': memory_available
    }
 
# 使用函数
hostname = 'your_server_ip'
username = 'your_username'
password = 'your_password'
memory_info = get_memory_usage(hostname, username=username, password=password)
print(memory_info)

注意事项:
权限问题:确保你的SSH用户有权限执行free命令。

版本兼容性:free命令的输出在不同的Linux发行版和版本间可能有所不同,上述代码假定使用的是GNU版本的free。如果输出格式有变化,可能需要调整解析逻辑。例如,在某些版本的free中,available列可能在第六列而不是第七列。

安全性:直接在代码中硬编码用户名和密码不是一个安全的做法。考虑使用更安全的方法,如密钥认证或环境变量。例如,使用密钥认证可以这样设置:

private_key = paramiko.RSAKey.from_private_key_file('/path/to/private/key')
ssh.connect(hostname, port, username, pkey=private_key)

这样可以避免在代码中暴露密码。

通过以上步骤,你可以安全有效地从远程Linux服务器获取并计算内存利用率。

你可能感兴趣的:(linux,python,机器学习)