在linux中使用python实现oracle进程的均衡负载
来源:互联网 发布:淘宝最新爆款方法 编辑:程序博客网 时间:2024/05/19 03:42
在linux中使用python实现oracle进程的均衡负载
1、问题描述
一般Linux操作系统会对多CPU进行负载均横调度。但是有时因为应用系统的原因,
多CPU会表现不太均衡。目前的客户就遇到这样的情况,日常运行中16核的数据库
服务器第一核和第二核负载严重,其它比较空闲。
2、基本思路
针对此问题,直接的方式就是通过linux的taskset程序来对进程的均衡负载:
1)、先读取所有oracle的进程,
2)、根据进程的CPU使用率进行排序,
3)、将前16个进程随机分配到16个CPU。
具体实现选用python来实现。
Python 2.x 和 3.x 通常已经内置在现代 Linux 发行版中,你可以立刻使用它。
你可以终端模拟器中输入 python 或 python3 来进入 Python shell, 并输入
quit() 退出。
3、程序解析
1)、使用subprocess获取linux进程
args = ['ps', 'aux']
ps = subprocess.Popen(args, stdout=subprocess.PIPE)
2)、将进程进行排序
dict1=sorted(PS.values(),key=lambda d:d['%cpu'],reverse=True)
3)、将前16个进程随机分配到16个CPU。
subprocess.call(["taskset","-pc",str(random.randint(0,15)),i['pid']])
4、程序执行方式
$ptyhon mgr-oracle.py
5、小结
此程序运行于客户的oracle数据库服务器,表现良好,实现了多CPU的负载均横。
参考文献
1、Getting Started with Python Programming and Scripting in Linux 作者: Gabriel Cánepa
https://www.tecmint.com/learn-python-programming-and-scripting-in-linux/
2、精通 Oracle+Python,第 8 部分:适合 Oracle DBA 使用的 Python作者:Przemyslaw Piotrowski
http://www.oracle.com/technetwork/cn/articles/dsl/mastering-oracle-python-dba-1392286-zhs.html
附程序完整代码(文件名:mgr-oracle.py):
#!/usr/bin/python
# -*- coding: UTF-8 -*-
#Licensed under the Apache License, Version 2.0
# Author Hua.Huang
# 50547681@qq.com
import re
import subprocess
import time
import random
while 1:
args = ['ps', 'aux']
ps = subprocess.Popen(args, stdout=subprocess.PIPE)
processes = ps.stdout.readlines()
header = re.split('\s+', processes.pop(0))[:-1]
header.remove('COMMAND')
PS = {}
for process in processes:
columns = re.split('\s+', process)
if columns[0]!='oracle':
continue
PS[int(columns[1])] = {}
for position, column in enumerate(columns[:9]):
PS[int(columns[1])][header[position].lower()] = column
PS[int(columns[1])]['command'] = ' '.join(columns[10:])
dict1=sorted(PS.values(),key=lambda d:d['%cpu'],reverse=True)
#pprint(dict1)
a=0
for i in dict1:
print "pid:",i['pid']
print "%cpu:",i['%cpu']
subprocess.call(["taskset","-pc",str(random.randint(0,15)),i['pid']])
if a==15:
break
a=a+1
time.sleep(10)
- 在linux中使用python实现oracle进程的均衡负载
- Linux中使用LVS实现负载均衡
- 使用Linux实现负载均衡
- 使用Linux实现负载均衡
- .tracker中实现均衡负载的代码在哪
- 如何在Nginx中实现负载均衡?
- 在Nginx中如何实现负载均衡?
- 如何在Nginx中实现负载均衡?
- 使用nginx来负载均衡 本文在window与linux下配置nginx实现负载
- 使用Linux实现负载均衡zz
- linux使用ipvsadm实现web负载均衡
- linux使用ipvsadm实现web负载均衡
- Linux实现负载均衡
- Linux服务器网络负载均衡的实现
- linux负载均衡调度算法的实现
- Turbolinux中实现负载均衡的方法
- 使用LVS 实现负载均衡的原理。
- Oracle客户端实现负载均衡
- webview 那些事儿
- 数据库优化方法借鉴
- Ubuntu报错修复方法
- StringUtils用法+StringUtils详细介绍
- 【机器学习】神经网络
- 在linux中使用python实现oracle进程的均衡负载
- java.lang.String.isEmpty()
- 欢迎使用CSDN-markdown编辑器
- 安卓设计模式の策略模式
- MVP五大设计原则
- Android Studio预览不显示文字的问题
- android 利用canvas 获取裁切或者合并后的bitmap对象
- BZOJ2750[HAOI2012]Road 最短路
- 正则表达式入门