gpt4 book ai didi

python - 将 Java 线程固定到内核

转载 作者:行者123 更新时间:2023-12-02 09:38:12 25 4
gpt4 key购买 nike

我正在启动的 Java 进程是 Elasticsearch,它创建了许多线程。
我检查使用 ps HuH p <pid> | wc -l .
这就是我获得elasticsearch pid的方式:

ES=`jps | egrep 'Elasticsearch' | awk '{print $1}'`

我使用以下 python 脚本将所有线程从给定的 pid 固定到一组核心。
#!/usr/bin/env python
import os
import argparse

def task_set(pid, core):
print "pinning all threads of pid: ", pid, " to cores: ", core
os.system('taskset -apc '+str(core)+' ' +str(pid)+' >/dev/null')

def main(args):
experiments = ["1B", "2B", "1B3S", "2B2S", "1S", "2S", "3S", "4S"]
which = args.id[0]
idx = experiments.index(which)
PC = ["0", "0,1", "0,2,3,4", "0,1,2,3", "2", "2,3","2,3,4", "2,3,4,5"]
task_set(args.pid[0], PC[idx])
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('--pid', nargs=1, help='appid')
parser.add_argument('--id', nargs=1, help='core')
args = parser.parse_args()
main(args)

但是,当我查看 top -H -p <pid> 时并监控核心分配。大多数时候它不服从。
有什么我在这里想念的吗? JVM 必须在这里做些什么吗?

有没有其他方法可以将线程固定到内核上?

最佳答案

taskset将正常工作。但是,如果进程处于 sleep 状态,则其当前 CPU 不会切换到新的 CPU。

cat /proc/<PID>/status | grep State:

要解决此问题,您可以这样做
kill -SIGSTOP <PID>
kill -SIGCONT <PID>

这会强制进程退出 sleep 状态并确保 CPU 切换。 tophtop然后将正确显示该值。

关于python - 将 Java 线程固定到内核,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35871503/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com