top中显示的ni值表示进程当前的nice值,nice值会影响到进程的pr(调度优先级),pr越小越优先调度,当nice值为负数的时候,优先级会变高。
写python程序做下面测试可以看到当nice值会正时,ni显示nice值为正的process所消耗的cpu。可以通过renice命令进行调整nice值,调整nice值为0或者负数,ni转化成us
while True:
pass
renice 5 -p 9144
Cpu(s): 0.0%us, 0.3%sy, 99.7%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
renice 0 -p 9144
Cpu(s): 99.3%us, 0.3%sy, 0.3%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
renice -5 -p 9144
Cpu(s): 94.7%us, 5.3%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
主线程的nice值改变,老的线程是不变的,ni值依旧。
#/usr/bin/python
import threading
class myThread(threading.Thread):
def __init__(self, threadID, name, counter):
threading.Thread.__init__(self)
self.threadID = threadID
self.name = name
self.counter = counter
def run(self):
while True:
pass
thread1 = myThread(1, "Thread-1", 1)
thread1.start()
thread1.join()
有一个mysql服务器,top看的时候ni值很高,发现mysql的nice值是5,用renice改成0了,发现ni依旧很高,观察没有其他进程在用cpu。求助之后,王总告诉我主线程的nice值改变,老的线程是不变的,ni值依旧,linux 下, NPTL 线程的 LWP ID 也是进程 ID。
通过下面的方法对当前的lwp逐个进行修改,修改之后ni值下降,us值变高,恢复正常。
lwp (light weight process, or thread) ID of the lwp being reported.
ps -eo pid,lwp,nice,command -L |grep mysql|awk ‘{print $2}’|xargs -i renice 0 -p {