# -*- coding: UTF-8 -*-
"""
@author:jcs
@file:deploy_jdk_jmeter.py
@time:2022/08/26
"""
import os
import subprocess
def doenload_file():
command = 'yum install -y java-1.8.0-openjdk.x86_64' \
' && ' \
'wget https://mirrors.tuna.tsinghua.edu.cn/apache/jmeter/binaries/apache-jmeter-5.5.tgz' \
' --no-check-certificate' \
' && ' \
'tar -zxvf apache-jmeter-5.5.tgz' \
' && ' \
'rm -rf apache-jmeter-5.5.tgz'
os.system(command)
def jmeter_config(ip, ips, MaxMetaspaceSize):
doenload_file()
pwd_path = os.popen('pwd').read().rstrip()
jmeter_path = f'{pwd_path}/apache-jmeter-5.5'
jmeter_bin = f'{pwd_path}/apache-jmeter-5.5/bin'
jmeter_properties_path = f'{jmeter_bin}/jmeter.properties'
jmeter_server_path = f'{jmeter_bin}/jmeter-server'
jmeter_sh_path = f'{jmeter_bin}/jmeter'
java_path = os.popen('which java').read().rstrip()
with open(jmeter_properties_path, 'r+') as j1, open(jmeter_sh_path, 'r+') as j2, open(jmeter_server_path, 'r+') as j3:
jmeter_properties_txt = j1.read().rstrip()
new_jmeter_properties_txt = jmeter_properties_txt.replace('#server_port=1099', 'server_port=1099') \
.replace('remote_hosts=127.0.0.1', f'remote_hosts={ips}') \
.replace('#server.rmi.ssl.disable=false', 'server.rmi.ssl.disable=true')
j1.seek(0)
j1.truncate()
j1.write(new_jmeter_properties_txt)
jmeter_sh_txt = j2.read().rstrip()
new_jmeter_properties_txt = jmeter_sh_txt \
.replace('"$JAVA_HOME/bin/java" $ARGS $JVM_ARGS $JMETER_OPTS -jar "$PRGDIR/ApacheJMeter.jar" "$@"',
f'"{java_path}" $ARGS $JVM_ARGS $JMETER_OPTS -jar "$PRGDIR/ApacheJMeter.jar" "$@"') \
.replace('## Defaults to "-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m"',
f'## Defaults to "-Xms10g -Xmx10g -XX:MaxMetaspaceSize={MaxMetaspaceSize}m"')
j2.seek(0)
j2.truncate()
j2.write(new_jmeter_properties_txt)
jmeter_server_txt = j3.read().rstrip()
new_jmeter_server_txt = jmeter_server_txt.replace('#RMI_HOST_DEF=-Djava.rmi.server.hostname=xxx.xxx.xxx.xxx', f'RMI_HOST_DEF=-Djava.rmi.server.hostname={ip}')
j3.seek(0)
j3.truncate()
j3.write(new_jmeter_server_txt)
os.popen('touch restart_server.sh start_jmeter_server.sh')
with open('restart_server.sh', 'a+') as r1, open('start_jmeter_server.sh', 'a+') as s1:
restart_txt = "#!/bin/bash\nsudo ps -ef | grep jmeter |grep -v grep | awk '{print $2}' |xargs kill -9\nsudo nohup /root/apache-jmeter-5.5/bin/jmeter-server -Djava.rmi.server.hostname={ip_txt} >nohup.out 2>&1 &".replace('{ip_txt}', f'{ip}')
start_txt = f"#!/bin/bash\nnohup /root/apache-jmeter-5.5/bin/jmeter-server -Djava.rmi.server.hostname={ip} >nohup.out 2>&1 &"
r1.write(restart_txt)
s1.write(start_txt)
os.system('chmod 777 restart_server.sh start_jmeter_server.sh')
with open("/etc/profile", 'a+') as profile:
export = f"\nexport JMETER={jmeter_path}\nexport PATH={jmeter_path}/bin:$PATH"
profile.write(export)
subprocess.call('source /etc/profile && jmeter -v', shell=True)
print(f"以配置调度机执行机共存模式ip:{ip}:1099\n执行机:{ips}\n内存池大小:{MaxMetaspaceSize}")
os.system('./start_jmeter_server.sh')
print('启动jmeter_server')
if __name__ == '__main__':
# jmeter部署 如果报错root运行
ip = "10.200.26.132" #本机ip
ips = "10.200.26.123:1099" #执行机地址
MaxMetaspaceSize = 61440 #内存池
jmeter_config(ip, ips, MaxMetaspaceSize)
jmeter分布式部署lunx下 root用户运行Python3 deploy_jdk_jmeter.py
于 2022-08-26 23:03:14 首次发布