查询OSD运行在哪些cpu上
前言
在看CPU相关的文章的时候,想起来之前有文章讨论是否要做CPU绑定,这个有说绑定的也有说不绑定的,然后就想到一个问题,有去观测这些OSD到底运行在哪些CPU上面么,有问题就好解决了,现在就是要查下机器上的OSD运行在哪些CPU上
代码
这里直接上代码了,最近学习python在,就用python来实现
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import os
import sys
import json
import psutil
import commands
from prettytable import PrettyTable
def main():
if len(sys.argv) == 1:
printosdcputable("process")
elif sys.argv[1] == 't':
printosdcputable("thread")
def printosdcputable(choose):
print choose
row = PrettyTable()
row.header = True
cpulist = ["OSD\CPU"]
corelist=["Core ID"]
phylist = ["Physical ID"]
emplist=["-----------"]
for cpupro in range(psutil.cpu_count()):
cpulist.append("%s" %cpupro )
coreid=commands.getoutput('egrep \'processor|physical id|core id\' /proc/cpuinfo | cut -d : -f 2 | paste - - - | awk \'$1==%s {print $3 }\'' %cpupro)
corelist.append("%s" %coreid)
phyid = commands.getoutput('egrep \'processor|physical id|core id\' /proc/cpuinfo | cut -d : -f 2 | paste - - - | awk \'$1==%s {print $2 }\'' % cpupro)
phylist.append("%s" %phyid)
emplist.append("--")
row.field_names = cpulist
row.add_row(corelist)
row.add_row(phylist)
row.add_row(emplist)
for root, dirs, files in os.walk('/var/run/ceph/'):
for name in files:
if "osd" in name and "pid" in name :
osdlist = []
osdthlist=[]
for osdcpu in range(psutil.cpu_count()):
osdlist.append(" ")
osdthlist.append("0")
pidfile=root+ name
osdid=commands.getoutput('ls %s|cut -d "." -f 2 2>/dev/null' %pidfile )
osdpid = commands.getoutput('cat %s 2>/dev/null' %pidfile)
osd_runcpu = commands.getoutput('ps -o psr -p %s |grep -v PSR 2>/dev/null' %osdpid)
th_list = commands.getoutput('ps -o psr -L -p %s |grep -v PSR|awk \'gsub(/^ *| *$/,"")\' 2>/dev/null' % osdpid)
osdname="osd."+osdid
osdlist[int(osd_runcpu)]="+"
for osdth in th_list.split('\n'):
osdthlist[int(osdth)] = int(osdthlist[int(osdth)])+1
osdlist.insert(0,osdname)
osdthlist.insert(0,osdname)
if choose == "process":
row.add_row(osdlist)
elif choose == "thread":
row.add_row(osdthlist)
print row
if __name__ == '__main__':
main()
运行脚本:
watch python getosdcpu.py
或者监控线程
watch python getosdcpu.py t
运行效果如下:

线程的情况

看上去确实有些CPU上面运行了多个OSD,这里不讨论CPU绑定的好坏,只是展示现象,具体有什么效果,是需要用数据取分析的,这个以后再看下
补充
如果你发现你运行的脚本没有结果,这个不是脚本的问题,是因为没有生成pid文件,在配置文件/etc/ceph/ceph.conf当中增加:
pid_file = /var/run/ceph/$type.$id.pid
然后重启osd进程,检查生成了pid没有
ll /var/run/ceph/*.pid
变更记录
| Why | Who | When |
|---|---|---|
| 创建 | 武汉-运维-磨渣 | 2016-11-16 |
| 解决无pid | 武汉-运维-磨渣 | 2017-02-21 |
查询OSD运行在哪些cpu上的更多相关文章
- linxu下查看进程的线程方法;如何知道某个进程或者线程运行在哪个CPU上?
1.top -H -p <pid> ; top -H 在top命令后,按H键:或者top -H 2.ps -T -p <pid> “-T”选项可以开启线程查看 3.htop, ...
- linux 下查看某个进程中线程运行在哪个CPU上
运行程序,使用命令top查看指定的进程的PID: 然后使用命令: top -H -p PID 按f键,并使用上下切换,利用空格键选中nTH,P: 按esc键,P所在的列就是线程运行的CPU号:
- 【linux】如何查看进程运行在那颗cpu上
这里介绍一种方法查看进程运行在哪个cpu上, 首先top 然后按字母:f 按字母:j 回车即可 其中P列表示进程运行在哪个CPU上
- taskset: 让进程运行在指定的CPU 上
观察发现4核CPU,只有第1个核心(CPU#0)非常忙,其他都处于idle状态. 不了解Linux是如何调度的,但目前显然有优化的余地.除了处理正常任务,CPU#0还需要处理每秒网卡中断.因此,若能将 ...
- 限制某个进程只能在某个CPU上运行
首先可以调用GetSystemInfo查看有多少个CPU,再通过调用: BOOL WINAPI SetProcessAffinityMask( __in HANDLE hProcess, __in D ...
- Linux 进程、线程运行在指定CPU核上
/******************************************************************************** * Linux 进程.线程运行在指定 ...
- 【翻译】运行于x86机器上的FreeBSD的PCI中断
来源 http://people.freebsd.org/~jhb/papers/bsdcan/2007/article/article.html 摘要 在拥有多个独立设备的计算机里一个重要的元素是一 ...
- linux下将不同线程绑定到不同core和cpu上——pthread_setaffinity_np
=============================================================== linux下的单进程多线程的程序,要实现每个线程平均分配到多核cpu,主 ...
- 系统运行缓慢,CPU 100%,以及Full GC次数过多问题的排查思路
前言 处理过线上问题的同学基本上都会遇到系统突然运行缓慢,CPU 100%,以及Full GC次数过多的问题.当然,这些问题的最终导致的直观现象就是系统运行缓慢,并且有大量的报警. 本文主要针对系统运 ...
随机推荐
- Verilog基础入门——Vivado流水灯工程(四)(实验报告)
今日进行了数字逻辑实验,完成了一个最简单的FPGA设计,即流水灯设计. 此处记录我们的指导文件以及实验报告,同时记录遇到的问题及解决方法. 一.vivado工程源文件编写 counter.v文件 `t ...
- pytest文档47-allure报告添加用例失败截图
前言 使用 selenium 做 web 自动化的时候,很多小伙伴希望用例失败的时候能截图,把异常截图展示到allure报告里面. pytest 有个很好的钩子函数 pytest_runtest_ma ...
- C 语言因为疫情重登最流行编程语言榜第一名!其实它一直都在~
C 语言时隔五年后再次荣登最流行编程语言榜单第一名. 通过调查得出结论, C 语言再次受欢迎的原因竟然是因为病毒,这听起来愚蠢但确实是事实,嵌入式语言 C 和 C++ 被用于医疗设备中的幅度因为疫 ...
- wine实用经验教程
本篇讲类unix系统下的用以模拟运行Windows程序的wine.会从普通使用者的比较实用的角度去讲.有专为国内用户准备的内容. 本篇面向有Linux经验但对wine不熟悉的人. wine可靠吗?该不 ...
- CVE-2010-2883-CoolType.dll缓冲区溢出漏洞分析
前言 此漏洞是根据泉哥的<漏洞战争>来学习分析的,网上已有大量分析文章在此只是做一个独立的分析记录. 复现环境 操作系统 -> Windows XP Sp3 软件版本 -> A ...
- Linux文件的查找之find命令处理动作
查找到文件之后的处理动作 例如:找出来系统中比较大超过10G的并且存放时间超过一年的log文件并删除 find / -name ".log" -size +10G -mtime + ...
- java中的三大注解
三大注解的作用 Java三大注解分别是@Override @Deprecated @Suppresswarnings @Override 注解表名子类中覆盖了超类中的某个方法,如果写错了覆盖形式,编译 ...
- servlet post response.sendRedirect 乱码
response.sendRedircet一般用于传递字符串参数 常会出现乱码: 情景1: post表单提交,跳转后的servlet,通过getParameter(name)进行解码,获取的中文乱码 ...
- CyclicBarrier(循环栅栏)
CyclicBarrier public class CyclicBarrierDemo { public static void main(String[] args) { CyclicBarrie ...
- 续 Eureka+Hystrix+Zuul(Zuul API网关)
概述: 服务的合并,转发,验证,异构协议.将上百个请求融为一个发送到后台,返回大的JSON返回处理: 作用:这减少了客户端与应用程序间的交互次数,还简化了客户端代码. Zuul可以通过加载动态过滤机制 ...