前言

在看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上的更多相关文章

  1. linxu下查看进程的线程方法;如何知道某个进程或者线程运行在哪个CPU上?

    1.top -H -p <pid>  ; top -H 在top命令后,按H键:或者top -H 2.ps -T -p <pid> “-T”选项可以开启线程查看 3.htop, ...

  2. linux 下查看某个进程中线程运行在哪个CPU上

    运行程序,使用命令top查看指定的进程的PID: 然后使用命令: top -H -p PID 按f键,并使用上下切换,利用空格键选中nTH,P: 按esc键,P所在的列就是线程运行的CPU号:

  3. 【linux】如何查看进程运行在那颗cpu上

    这里介绍一种方法查看进程运行在哪个cpu上, 首先top 然后按字母:f 按字母:j 回车即可 其中P列表示进程运行在哪个CPU上

  4. taskset: 让进程运行在指定的CPU 上

    观察发现4核CPU,只有第1个核心(CPU#0)非常忙,其他都处于idle状态. 不了解Linux是如何调度的,但目前显然有优化的余地.除了处理正常任务,CPU#0还需要处理每秒网卡中断.因此,若能将 ...

  5. 限制某个进程只能在某个CPU上运行

    首先可以调用GetSystemInfo查看有多少个CPU,再通过调用: BOOL WINAPI SetProcessAffinityMask( __in HANDLE hProcess, __in D ...

  6. Linux 进程、线程运行在指定CPU核上

    /******************************************************************************** * Linux 进程.线程运行在指定 ...

  7. 【翻译】运行于x86机器上的FreeBSD的PCI中断

    来源 http://people.freebsd.org/~jhb/papers/bsdcan/2007/article/article.html 摘要 在拥有多个独立设备的计算机里一个重要的元素是一 ...

  8. linux下将不同线程绑定到不同core和cpu上——pthread_setaffinity_np

    =============================================================== linux下的单进程多线程的程序,要实现每个线程平均分配到多核cpu,主 ...

  9. 系统运行缓慢,CPU 100%,以及Full GC次数过多问题的排查思路

    前言 处理过线上问题的同学基本上都会遇到系统突然运行缓慢,CPU 100%,以及Full GC次数过多的问题.当然,这些问题的最终导致的直观现象就是系统运行缓慢,并且有大量的报警. 本文主要针对系统运 ...

随机推荐

  1. operator bool()是什么

    operator bool()是什么 在C++中,operator TypeName()语法用来将对象转换为指定的TypeName类型,当这里TypeName为bool时,就可以直接在条件判断式里面直 ...

  2. Mysql数据库分布式事务XA详解

    XA事务简介 XA 事务的基础是两阶段提交协议.需要有一个事务协调者来保证所有的事务参与者都完成了准备工作(第一阶段).如果协调者收到所有参与者都准备好的消息,就会通知所有的事务都可以提交了(第二阶段 ...

  3. logstash -grok插件语法介绍

      介绍 logstash拥有丰富的filter插件,它们扩展了进入过滤器的原始数据,进行复杂的逻辑处理,甚至可以无中生有的添加新的 logstash 事件到后续的流程中去!Grok 是 Logsta ...

  4. centos8平台使用iotop监控磁盘io

    一,iotop的作用: iotop是监视磁盘I/O使用状况的top类工具, 可以针对进程和线程统计io的使用情况 说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblog ...

  5. 第二章 rsync服务原理

    一.备份 1.什么是备份? 1)把重要的数据或者文件再次复制一份并保存下来 2.为什么要做备份? 1)数据的重要性 2)为了出现故障,恢复数据 3.能不能不备份? 1)重要的数据一定要备份 2)不重要 ...

  6. 【应用服务 App Service】App Service 中部署Java应用中文乱码现象

    问题情形 有时候部署在 Azure  App Service的 Java应用会出现乱码 详细日志 无 问题原因 因为 App Service默认的编码为gbk,所以在显示页面或传递中文字符时就会出现乱 ...

  7. Java Web核心组件之Servlet的使用介绍

    Servlet是Java Servlet的简称,称为小程序或服务连接器,用Java编写的服务端程序,主要功能在于交互式地浏览和修改数据,生成动态的Web内容:Servlet运行于支持Java的应用服务 ...

  8. java 第一课 笔记

    java是一种解释型语言 Java提供了内存自动管理:不涉及指针:单继承. classpath:字节码文件的路径,执行java.exe时,会查找并解释*.class文件 set classpath=. ...

  9. svg 进度条

    先看理想效果 先上代码,在进行解释 <div id="app"> <svg width="230" height="230" ...

  10. Linux 系统基于 Hadoop 安装 Hive

    [注意]安装hive前提是要先安装hadoop集群,并且hive只需要在hadoop的namenode节点集群里安装即可(在所有的namenode上安装),可以不在datanode节点的机器上安装. ...