我有Ubuntu的服务器14.04,我想知道是否有任何简单的方法来实现这一任务。
例如,我已经可以使用taskset -pac 2 29435为单个进程执行此操作,但有什么方法可以通过用户名来代替进程ID吗?
先谢谢你。
没做什么。 真的,什么都不要做。
如果您的目的是尽可能有效地传播您的资源,那么恰当的做法是让操作系统根据需要随时将进程移动到相关CPU。
对于性能优化的情况,限制CPU资源或使用情况绝不是一个好主意 – 只会使性能变差。 您只想要限制CPU资源或可用于故意尝试削弱此过程的CPU。
你可能想要削弱一个过程的时代将是:
所以 – 什么都不要做,让操作系统把它整理出来。 经过一段时间你的实例运行(如果他们真的是CPU很重),你可以运行命令ps -Lo psr,pid,tid $(pgrep <processname>) ,你会看到每个资源正在分配正确CPU。
如果要确定每个进程是否获得了公平份额,以及每个程序中实际使用了多less,则执行以下操作,replace进程名称并获得以下结果:
$ ps -Lo psr,pid,tid,etime,cputime,comm $(pgrep firefox) PSR PID TID ELAPSED TIME COMMAND 2 3400 3400 1-07:16:10 01:22:29 firefox 2 3400 3425 1-07:16:10 00:00:00 gdbus 2 3400 3426 1-07:16:09 00:00:00 Gecko_IOThread 3 3400 3427 1-07:16:09 00:00:00 Link Monitor 1 3400 3428 1-07:16:09 00:02:50 Socket Thread 1 3400 3429 1-07:16:09 00:00:00 firefox 0 3400 3430 1-07:16:09 00:00:25 JS Helper 3 3400 3431 1-07:16:09 00:00:26 JS Helper 3 3400 3432 1-07:16:09 00:00:25 JS Helper 1 3400 3433 1-07:16:09 00:00:25 JS Helper 1 3400 3434 1-07:16:09 00:00:26 JS Helper 3 3400 3435 1-07:16:09 00:00:25 JS Helper 0 3400 3436 1-07:16:09 00:00:25 JS Helper 0 3400 3437 1-07:16:09 00:00:26 JS Helper 2 3400 3438 1-07:16:09 00:00:02 JS Watchdog 2 3400 3439 1-07:16:09 00:00:00 Hang Monitor 1 3400 3440 1-07:16:09 00:00:00 BgHangManager 3 3400 3441 1-07:16:09 00:00:32 Cache2 I/O 0 3400 3442 1-07:16:09 00:02:41 Timer 3 3400 3444 1-07:16:09 00:00:00 GMPThread 2 3400 3447 1-07:16:09 00:07:24 Compositor 0 3400 3448 1-07:16:09 00:01:08 ImageBridgeChil 3 3400 3449 1-07:16:09 00:00:31 ImgDecoder #1 1 3400 3450 1-07:16:09 00:00:32 ImgDecoder #2 3 3400 3451 1-07:16:09 00:00:31 ImgDecoder #3 2 3400 3452 1-07:16:09 00:00:00 ImageIO 2 3400 3453 1-07:16:09 00:04:07 SoftwareVsyncTh 0 3400 3454 1-07:16:08 00:00:00 firefox 2 3400 3455 1-07:16:08 00:00:00 Cert Verify 2 3400 3456 1-07:16:08 00:00:00 IPDL Background 0 3400 3457 1-07:16:08 00:00:37 DOM Worker 2 3400 3458 1-07:16:08 00:00:03 HTML5 Parser 2 3400 3462 1-07:16:07 00:00:01 mozStorage #1 1 3400 3463 1-07:16:07 00:00:00 Proxy R~olution 1 3400 3464 1-07:16:07 00:00:49 URL Classifier 2 3400 3466 1-07:16:07 00:00:02 mozStorage #2 0 3400 3467 1-07:16:07 00:00:00 gmain 3 3400 3468 1-07:16:07 00:00:00 Cache I/O 3 3400 3471 1-07:16:07 00:00:00 mozStorage #3 2 3400 3477 1-07:16:07 00:00:35 DOM Worker 2 3400 3479 1-07:16:07 00:00:00 mozStorage #4 0 3400 3482 1-07:16:07 00:00:00 localStorage DB 2 3400 3483 1-07:16:07 00:00:03 mozStorage #5 1 3400 3519 1-07:15:57 00:00:00 mozStorage #6 2 3400 3537 1-07:14:09 00:00:31 DOM Worker 0 3400 3562 1-07:08:35 00:00:00 mozStorage #7 0 3400 3587 1-06:59:39 00:00:00 threaded-ml 2 3400 3597 1-06:49:40 00:00:00 mozStorage #8 2 3400 7594 1-01:36:55 00:00:34 threaded-ml 3 3400 11679 10:48:07 00:00:00 firefox 2 3400 11684 10:48:07 00:00:00 typefind:sink 2 3400 11687 10:48:07 00:00:00 typefind:sink 1 3400 11689 10:48:07 00:00:00 typefind:sink 0 3400 11690 10:48:07 00:00:00 mpegaudioparse0 1 3400 11691 10:48:07 00:00:00 mpegaudioparse1 2 3400 11692 10:48:07 00:00:00 mpegaudioparse2 0 3400 11693 10:48:07 00:00:00 aqueue:src 1 3400 11694 10:48:07 00:00:00 aqueue:src 1 3400 11695 10:48:07 00:00:00 aqueue:src 2 3400 22770 05:38:46 00:00:00 firefox 3 3400 29803 10:17 00:00:00 DNS Res~er #226 3 3400 30018 01:28 00:00:00 DNS Res~er #228
在这个例子中,我在我的机器上使用了firefox,但是你可以改变进程名称来满足你的需要。
在这里,我要求每一个生活在这个过程中的线程。 这些列的含义如下:
要确定在其生命周期中的stream程利用率,可以执行以下计算(我使用的是Firefox):
TIME / ELAPSED * 100 = UTIL 112570 / 4949 * 100 = 4.40
注意 :实际的进程ID(tid == pid的主启动线程)充当所有线程(现有的或不再存在的)cumalative总数的“容器”,因此可以合理准确地描述进程整个使用。
要解释一下,如果一个进程的生命周期等于它的CPU时间,这意味着在进程一直存在的时间里,它的要求和接受一个CPU来运行。 这将等于CPU利用率的100%。
实际上我几乎可以肯定你会发现你的stream程几乎不会使用任何CPU。
因此,重申一下,尽可能高效地执行任何操作都不会影响内核知道如何最佳地确定CPU资源的优先级,以便最好地利用您的系统。 在大多数情况下,您可能添加的任何内容都会降低整体效果 。
除非你的计划实际上以某种方式削弱了进程(并且在某些情况下你可能打算这样做),你不想使用taskset , control groups或者LXC/Docker来获得最好的性能。