1. 程式人生 > >linux的cpu資源調優方法

linux的cpu資源調優方法

一)中斷的CPU親和性 我們可以調整中斷到某個CPU上,這樣可以讓CPU更有效的利用起來. 首先關閉掉irqbalance服務,如下: /etc/init.d/irqbalance stop  Stopping irqbalance: [  OK  ] 檢視當前各種中斷所使用的CPU,如下: for f in `find . -name "smp_affinity"`; do echo -ne "$f->" && cat $f; done ./18/smp_affinity->1 ./17/smp_affinity->3 ./15/smp_affinity->1 ./14/smp_affinity->1 ./13/smp_affinity->3 ./12/smp_affinity->1 ./11/smp_affinity->3 ./10/smp_affinity->3 ./9/smp_affinity->3 ./8/smp_affinity->3 ./7/smp_affinity->3 ./6/smp_affinity->3 ./5/smp_affinity->3 ./4/smp_affinity->3 ./3/smp_affinity->3 ./2/smp_affinity->3 ./1/smp_affinity->3 ./0/smp_affinity->3 檢視中斷使用率,如下: cat /proc/interrupts             CPU0       CPU1          0:        137          0   IO-APIC-edge      timer   1:          7          1   IO-APIC-edge      i8042   3:          0          1   IO-APIC-edge       4:          1          0   IO-APIC-edge       7:          0          0   IO-APIC-edge      parport0   8:          0          0   IO-APIC-edge      rtc0   9:          0          0   IO-APIC-fasteoi   acpi  12:        103          2   IO-APIC-edge      i8042  14:       2301        628   IO-APIC-edge      ata_piix  15:        116         49   IO-APIC-edge      ata_piix  17:         15          0   IO-APIC-fasteoi   ioc0  18:       4122         39   IO-APIC-fasteoi   eth0 NMI:          0          0   Non-maskable interrupts LOC:      18423      16772   Local timer interrupts SPU:          0          0   Spurious interrupts PMI:          0          0   Performance monitoring interrupts PND:          0          0   Performance pending work RES:       2740       2914   Rescheduling interrupts CAL:        110       1349   Function call interrupts TLB:        339        421   TLB shootdowns TRM:          0          0   Thermal event interrupts THR:          0          0   Threshold APIC interrupts MCE:          0          0   Machine check exceptions MCP:          3          3   Machine check polls ERR:          0 MIS:          0 我們看一下18號中斷下的相關檔案,如下: cd /proc/irq/18/ && ls affinity_hint  eth0  node  smp_affinity  spurious 我們看下它使用的CPU. more smp_affinity  1 注:這裡輸出為1表示,它使用了第一個CPU,1對映的兩進位制掩碼也是1. 如果它使用前兩個CPU,那麼這裡就是3,即二進位制的11. 如果我們有4個處理器,這裡的值就應該是F,也就是二進位制1111. 如果我們只要第2個處理器進行處理,這裡的值就應該是2,因為2的二進位制是10. 我們在另一臺伺服器ping本機,如下: ping 192.168.75.135 64 bytes from 192.168.75.135: icmp_seq=3454 ttl=64 time=2.80 ms 64 bytes from 192.168.75.135: icmp_seq=3455 ttl=64 time=3.80 ms 64 bytes from 192.168.75.135: icmp_seq=3456 ttl=64 time=0.814 ms 64 bytes from 192.168.75.135: icmp_seq=3457 ttl=64 time=0.293 ms 64 bytes from 192.168.75.135: icmp_seq=3458 ttl=64 time=1.84 ms 64 bytes from 192.168.75.135: icmp_seq=3459 ttl=64 time=0.265 ms 64 bytes from 192.168.75.135: icmp_seq=3460 ttl=64 time=0.021 ms 64 bytes from 192.168.75.135: icmp_seq=3461 ttl=64 time=0.793 ms 64 bytes from 192.168.75.135: icmp_seq=3462 ttl=64 time=0.285 ms 64 bytes from 192.168.75.135: icmp_seq=3463 ttl=64 time=0.038 ms 64 bytes from 192.168.75.135: icmp_seq=3464 ttl=64 time=0.936 ms 64 bytes from 192.168.75.135: icmp_seq=3465 ttl=64 time=0.279 ms 64 bytes from 192.168.75.135: icmp_seq=3466 ttl=64 time=0.706 ms 在本機監控網絡卡中斷分佈,如下: while ((1)) ; do sleep 1; cat /proc/interrupts |grep eth0; done  18:       5568         39   IO-APIC-fasteoi   eth0  18:       5570         39   IO-APIC-fasteoi   eth0  18:       5576         39   IO-APIC-fasteoi   eth0  18:       5580         39   IO-APIC-fasteoi   eth0  18:       5584         39   IO-APIC-fasteoi   eth0  18:       5590         39   IO-APIC-fasteoi   eth0  18:       5592         39   IO-APIC-fasteoi   eth0  18:       5598         39   IO-APIC-fasteoi   eth0  18:       5604         39   IO-APIC-fasteoi   eth0  18:       5606         39   IO-APIC-fasteoi   eth0  18:       5612         39   IO-APIC-fasteoi   eth0  18:       5616         39   IO-APIC-fasteoi   eth0  18:       5620         39   IO-APIC-fasteoi   eth0  18:       5626         39   IO-APIC-fasteoi   eth0  18:       5628         39   IO-APIC-fasteoi   eth0  18:       5634         39   IO-APIC-fasteoi   eth0  18:       5638         39   IO-APIC-fasteoi   eth0  18:       5641         39   IO-APIC-fasteoi   eth0  18:       5647         39   IO-APIC-fasteoi   eth0  18:       5650         39   IO-APIC-fasteoi   eth0  18:       5656         39   IO-APIC-fasteoi   eth0 我們看到當前的中斷(第二列)即所有的網絡卡中斷請求都分佈到了CPU0. 我們這裡指定前兩個CPU做為處理網絡卡請求,如下: echo "3" > smp_affinity while ((1)) ; do sleep 1; cat /proc/interrupts |grep eth0; done  18:       6430         50   IO-APIC-fasteoi   eth0  18:       6433         53   IO-APIC-fasteoi   eth0  18:       6439         53   IO-APIC-fasteoi   eth0  18:       6441         53   IO-APIC-fasteoi   eth0  18:       6443         57   IO-APIC-fasteoi   eth0  18:       6444         58   IO-APIC-fasteoi   eth0  18:       6447         61   IO-APIC-fasteoi   eth0  18:       6449         61   IO-APIC-fasteoi   eth0  18:       6453         63   IO-APIC-fasteoi   eth0  18:       6459         63   IO-APIC-fasteoi   eth0  18:       6459         65   IO-APIC-fasteoi   eth0  18:       6462         68   IO-APIC-fasteoi   eth0  18:       6463         69   IO-APIC-fasteoi   eth0  18:       6467         71   IO-APIC-fasteoi   eth0  18:       6469         71   IO-APIC-fasteoi   eth0  18:       6472         73   IO-APIC-fasteoi   eth0 注:我們看到網絡卡的中斷請求已經平均的分配到了兩個CPU. 二)isolcpus 通過在grub中設定isolcpus核心引數可以指定哪幾個CPU在系統中是孤立的,也就是說預設它們將不被使用. 測試如下: 編輯/boot/grub/menu.list 在載入核心的選項後加入isolcpus=0,如下: kernel /boot/vmlinuz-2.6.32-71.el6.i686 ro root=UUID=96262e00-91a3-432d-b225-cb35d29eec8f rhgb quiet isolcpus=0 也就是說我們在啟動系統時將預設不使用CPU0,注意這裡說的預設不使用並不是絕對的,作業系統仍然可以指定使用哪個CPU.對於使用者而言可以通過taskset來做到這點. 重啟系統後,我們檢視程序的親和性,如下: ps -eo pid,args:50,psr    PID COMMAND                                            PSR     1 /sbin/init                                           1     2 [kthreadd]                                           0     3 [migration/0]                                        0     4 [ksoftirqd/0]                                        0     5 [watchdog/0]                                         0     6 [migration/1]                                        1     7 [ksoftirqd/1]                                        1     8 [watchdog/1]                                         1     9 [events/0]                                           0    10 [events/1]                                           1    11 [cpuset]                                             0    12 [khelper]                                            0    13 [netns]                                              0    14 [async/mgr]                                          0    15 [pm]                                                 0    16 [sync_supers]                                        1    17 [bdi-default]                                        0    18 [kintegrityd/0]                                      0    19 [kintegrityd/1]                                      1    20 [kblockd/0]                                          0    21 [kblockd/1]                                          1    22 [kacpid]                                             0    23 [kacpi_notify]                                       0    24 [kacpi_hotplug]                                      0    25 [ata/0]                                              0    26 [ata/1]                                              1    27 [ata_aux]                                            0    28 [ksuspend_usbd]                                      0    29 [khubd]                                              0    30 [kseriod]                                            0    33 [khungtaskd]                                         0    34 [kswapd0]                                            0    35 [ksmd]                                               0    36 [aio/0]                                              0    37 [aio/1]                                              1    38 [crypto/0]                                           0    39 [crypto/1]                                           1    45 [kpsmoused]                                          0    46 [usbhid_resumer]                                     0    75 [kstriped]                                           0   239 [scsi_eh_0]                                          0   240 [scsi_eh_1]                                          0   250 [mpt_poll_0]                                         0   251 [mpt/0]                                              0   252 [scsi_eh_2]                                          0   301 [jbd2/sda1-8]                                        0   302 [ext4-dio-unwrit]                                    0   303 [ext4-dio-unwrit]                                    1   324 [flush-8:0]                                          0   390 /sbin/udevd -d                                       1   643 /sbin/udevd -d                                       1   644 /sbin/udevd -d                                       1   731 [kauditd]                                            0  1004 auditd                                               1  1029 /sbin/rsyslogd -c 4                                  1  1062 irqbalance                                           1  1081 rpcbind                                              1  1093 mdadm --monitor --scan -f --pid-file=/var/run/mdad   1  1102 dbus-daemon --system                                 1  1113 NetworkManager --pid-file=/var/run/NetworkManager/   1  1117 /usr/sbin/modem-manager                              1  1124 /sbin/dhclient -d -4 -sf /usr/libexec/nm-dhcp-clie   1  1129 /usr/sbin/wpa_supplicant -c /etc/wpa_supplicant/wp   1  1131 avahi-daemon: registering [linux.local]              1  1132 avahi-daemon: chroot helper                          1  1149 rpc.statd                                            1  1186 [rpciod/0]                                           0  1187 [rpciod/1]                                           1  1194 rpc.idmapd                                           1  1204 cupsd -C /etc/cups/cupsd.conf                        1  1229 /usr/sbin/acpid                                      1  1238 hald                                                 1  1239 hald-runner                                          1  1279 hald-addon-input: Listening on /dev/input/event2 /   1  1283 hald-addon-acpi: listening on acpid socket /var/ru   1  1303 automount --pid-file /var/run/autofs.pid             1  1326 /usr/sbin/sshd                                       1  1456 /usr/libexec/postfix/master                          1  1463 pickup -l -t fifo -u                                 1  1464 qmgr -l -t fifo -u                                   1  1467 /usr/sbin/abrtd                                      1  1475 crond                                                1  1486 /usr/sbin/atd                                        1  1497 libvirtd --daemon                                    1  1553 /sbin/mingetty /dev/tty1                             1  1558 /sbin/mingetty /dev/tty2                             1  1561 /sbin/mingetty /dev/tty3                             1  1564 /sbin/mingetty /dev/tty4                             1  1567 /sbin/mingetty /dev/tty5                             1  1569 /sbin/mingetty /dev/tty6                             1  1586 /usr/sbin/dnsmasq --strict-order --bind-interfaces   1  1598 sshd: [email protected]/0                                     1  1603 -bash                                                1 我們看到有一些核心執行緒比如[kblockd/0]佔用了CPU0,這是因為它指定了在CPU0上執行.其餘的程序佔用了CPU1. 我們這裡用一個簡單的迴圈程式測試一下: #include <stdio.h> int main () { while(1){ } return 0; } gcc test.c ./a.out& ./a.out& ./a.out& ./a.out& 檢視a.out程序的程式親和性,如下: ps -eo pid,args:50,psr |grep a.out  1669 ./a.out                                              1  1670 ./a.out                                              1  1671 ./a.out                                              1  1672 ./a.out                                              1  1675 grep a.out                                           1 我們看到4個a.out程序都使用了CPU1.這正是我們想看到的. 最後要說明的是如果使用isolcpus=1,則系統預設會使用CPU0提供服務.如果我們只有兩個cpu,卻指定isolcpus=0,1,這時將預設使用CPU0. 三)cpu的熱插拔 在作業系統層面可以對cpu進行熱插拔. 動態關閉cpu1,如下: echo "0" > /sys/devices/system/cpu/cpu1/online   此時我們在系統中,只能看到1個CPU了. cat /proc/cpuinfo  processor       : 0 vendor_id       : AuthenticAMD cpu family      : 15 model           : 107 model name      : AMD Sempron(tm) Dual Core Processor 2300 stepping        : 2 cpu MHz         : 2210.053 cache size      : 256 KB fdiv_bug        : no hlt_bug         : no f00f_bug        : no coma_bug        : no fpu             : yes fpu_exception   : yes cpuid level     : 1 wp              : yes flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow constant_tsc up tsc_reliable extd_apicid pni cx16 lahf_lm extapic 3dnowprefetch bogomips        : 4420.10 clflush size    : 64 cache_alignment : 64 address sizes   : 36 bits physical, 48 bits virtual power management: ts fid vid ttp tm stc 100mhzsteps 注意,如果執行的程式跑在cpu1上,如果把cpu1關閉,則程式會遷移到cpu0上.另外cpu0是不可以被關閉的,在cpu0的sys檔案系統中沒有online檔案. 四)程序/執行緒的親和性和taskset的應用 1)概述: 1)CPU的親和性分為軟親合性和硬親合性,軟親合性是使程序並不會在處理器之間頻繁遷移.硬親合性是使程序需要在您指定的處理器上執行,Linux預設是軟親合性的,所以Linux會試圖保持程序在相同的CPU上執行,因為這樣再次應用TLB將成為可能. 2)Linux系統通過親和性掩碼使應用程式使用哪個CPU來執行程式,Linux預設的親合性掩碼是使用所有的CPU. 3)應用程式可以在啟動時指定親和性掩碼,提交給排程系統,也可以在應用程式執行中調整它的親和性掩碼. 2)用taskset手工調整一個程序的親和性 我們先弄一個最簡單的程式,它是一個死迴圈,如下: #include <stdio.h> int main () {         while(1){         }         return 0; } 編譯並執行: gcc taskloop.c -o taskloop ./taskloop 我們在另一個終端檢視該程序的狀態,如下: ps -eo pid,args:30,psr   PID COMMAND                          PSR  2826 ./taskloop                       0 注:上面的ps輸出,我們只保留了taskloop一行,PSR代表我們的程式用了哪個CPU,如果有兩個CPU,就分別CPU0,CPU1,也就是從0開始. 我們中止這個程式,用taskset來指定它用CPU1來執行,如下: taskset 2 ./taskloop 我們在另一個終端檢視該程序的狀態,如下: ps -eo pid,args:30,psr   PID COMMAND                          PSR  2892 ./taskloop                       1 注:通過taskset對親合性掩碼的設定,我們選擇了CPU1來執行這個程式,這裡要說明的是taskset指定的掩碼是從1開始計算的,我們指定用CPU1,就得用taskset 2 COMMAND來設定. 下面是親合性掩碼與CPU的對映,如下: 0x00000001是處理器1(CPU0) 0x00000002是處理器2(CPU1) 0x00000003是處理器1和處理器2(CPU0/CPU1) 0x00000004是處理器3(CPU2) 0x0000001F是前5個處理器(CPU0,CPU1,CPU2,CPU3,CPU4) 0xFFFFFFFF是所有的處理器(即32個處理器) 以此類推,上面是十六進位制的掩碼方式,在taskset中可以用十六進位制和十進位制兩種方式,我們為了方便,在這裡只用十進位制來表示. 同樣的我們也可以在程式執行中來改變它的親合性掩碼,從而改變它使用的CPU. 上面的taskloop程序使用了CPU1,我們將它改為使用CPU0,如下: taskset -p 1 `pgrep taskloop`   pid 2892's current affinity mask: 2 pid 2892's new affinity mask: 1 在另一個終端檢視該程序的狀態: ps -eo pid,args:30,psr  PID COMMAND                          PSR  2892 ./taskloop                       0 注:我們看到原本運行於CPU1的程序改用了CPU0,這裡要說明的是如果我們程式在sleep或pause,此時改變它的親合性掩碼但它不會選用新的CPU,只有當sleep或pause結束,它才會應用親和性掩碼. 3)程序中的親合性設定 通過sched_setaffinity函式,可以設定CPU的親和性,讓指定的程序運行於指定的CPU上,我們把之前的程式做一下變動,如下: #define _GNU_SOURCE #include <sched.h> #include <stdio.h> int main(){     cpu_set_t mask;     CPU_ZERO(&mask);     CPU_SET(1,&mask);     if(sched_setaffinity(0, sizeof(cpu_set_t), &mask)==-1)         printf("sched_setaffinity set error!");     while(1){     }     return 0; } 編譯並執行: gcc proaffinity.c -o proaffinity ./proaffinity 在另一個終端檢視該程序的狀態: ps -eo pid,args:20,psr|grep proaffinity|grep -v grep              3088 ./proaffinity          1 注:在程式中我們用sched_setaffinity函式,設定本程式用親合性掩碼1,也就是用第一個處理器來執行此程式. sched_setaffinity(0, sizeof(cpu_set_t), &mask)函式中的第一個引數是PID,如果是0,則代表程序自己,第二個引數是親合性掩碼的長度,第三個引數是親合性掩碼. CPU_ZERO(&mask)巨集呼叫是清理掩碼mask,CPU_SET(1,&mask)是設定掩碼mask為1. 4)執行緒中的親合性設定 通過pthread_attr_setaffinity_np函式,設定執行緒的親合性掩碼,也就是用第幾個處理器來執行該執行緒,如下: #define _GNU_SOURCE #include <stdio.h> #include <pthread.h> #include <unistd.h> int GetCpuCount() {     return (int)sysconf(_SC_NPROCESSORS_ONLN); } void *thread_fun() {     int i;     while(1)     {         i = 0;     }     return NULL; } int main() {     int cpu_num = 0;     cpu_num  = GetCpuCount();     printf("The number of cpu is %d\n", cpu_num);     pthread_t t1;     pthread_t t2;     pthread_attr_t attr1;     pthread_attr_t attr2;     pthread_attr_init(&attr1);     pthread_attr_init(&attr2);     cpu_set_t cpu_info;     CPU_ZERO(&cpu_info);     CPU_SET(0, &cpu_info);     if (0!=pthread_attr_setaffinity_np(&attr1, sizeof(cpu_set_t), &cpu_info))     {         printf("set affinity failed");         return;     }     CPU_ZERO(&cpu_info);     CPU_SET(1, &cpu_info);     if (0!=pthread_attr_setaffinity_np(&attr2, sizeof(cpu_set_t), &cpu_info))     {         printf("set affinity failed");     }     if (0!=pthread_create(&t1, &attr1, thread_fun, NULL))     {         printf("create thread 1 error\n");         return;     }     if (0!=pthread_create(&t2, &attr2, thread_fun, NULL))     {         printf("create thread 2 error\n");         return;     }     pthread_join(t1, NULL);     pthread_join(t2, NULL); } 編譯並執行: gcc pthraffinity.c -o pthraffinity -pthread ./proaffinity 我們在另一個終端檢視該程序中所有執行緒的狀態,如下: ps -eLo pid,lwp,args:20,psr   PID   LWP COMMAND              PSR  3191  3191 ./pthraffinity         1  3191  3192 ./pthraffinity         0  3191  3193 ./pthraffinity         1 注:LWP一列為執行緒ID,我們看到程序(PID=3191)用了CPU0,而第一個執行緒(LWP=3192)用了CPU1,這正是程式中設定的,而第二個執行緒(LWP=3193)用了CPU0,這也是程式的意圖. 五)cgroup 1)概述: cgroup它的全稱為control group.cgroup可以用於對一組程序分組,每一組程序就某種系統資源實現資源管理. cgroup即一組程序的行為控制.比如,我們限制程序/bin/sh的CPU使用為20%.我們就可以建一個cpu佔用為20%的cgroup.然後將 /bin/sh程序新增到這個cgroup中. 我們知道ulimit可以對系統資源進行限制,但ulimit以使用者的資源為單位的,而cgroup可以針對到某個程序. 我們也可以指定某個程序使用某個cpu.或者讓某些程序使用一組CPU. cgroup包含了多個孤立的子系統,每一個子系統代表一個單一的資源,在新的核心中cgroup控制的模組有9個子系統,分別是: blkio 這個子系統設定限制每個塊裝置的輸入輸出控制。例如:磁碟,光碟以及usb等等。 cpu   這個子系統使用排程程式為cgroup任務提供cpu的訪問。 cpuacct 產生cgroup任務的cpu資源報告。 cpuset  如果是多核心的cpu,這個子系統會為cgroup任務分配單獨的cpu和記憶體。 devices  允許或拒絕cgroup任務對裝置的訪問。 freezer   暫停和恢復cgroup任務。 memory 設定每個cgroup的記憶體限制以及產生記憶體資源報告。

相關推薦

linux的cpu資源調方法

一)中斷的CPU親和性 我們可以調整中斷到某個CPU上,這樣可以讓CPU更有效的利用起來. 首先關閉掉irqbalance服務,如下: /etc/init.d/irqbalance stop  Stopping irqbalance: [  OK  ] 檢視當前各種中斷所使用的CPU,如下: for

(非常有用)loadrunner資源監控問題及調方法

監測物件 Ø System(系統) l %Total Processor Time 系統中所有處理器都處於繁忙狀態的時間百分比,對於多處理器系統來說,該值可以反映所有處理器的平均繁忙狀態,該值為100%,如果有一半的處理器為繁忙狀態,該值為50%伺服器。器消耗的處

CPU負載觀察及調方法

cpu負載觀察及調優方法紅帽6實現無滴答 tick lessinterrupt-driven由軟中斷進行驅動在SMP多CPU架構中,傳統上多CPU對於內存的訪問是總線方式。是總線就會存在資源爭用和一致性問題,而且如果不斷的增加CPU數量,總線的爭用會愈演愈烈,這就體現在4核CPU的跑分性能達不到2核CPU的2

spark性能調資源調

重要 cnblogs logs 做的 參數說明 span 分配 比例 drive 轉https://tech.meituan.com/spark-tuning-basic.html spark作業原理 使用spark-submit提交一個Spark作業之後,這個作

JVM調總結(七)-調方法

圖片 死鎖 ron 詳細信息 ict 時間 最大 bsp 底部 JVM調優工具 Jconsole,jProfile,VisualVM Jconsole : jdk自帶,功能簡單,但是可以在系統有一定負荷的情況下使用。對垃圾回收算法有很詳細的跟蹤。詳細說明參考這裏 JP

Spark學習之路 (十二)SparkCore的調資源調JVM的基本架構

程序員 存儲 src ron 指示器 引用 double strong 功能 一、JVM的結構圖 1.1 Java內存結構 JVM內存結構主要有三大塊:堆內存、方法區和棧。 堆內存是JVM中最大的一塊由年輕代和老年代組成,而年輕代內存又被分成三部分,Eden空間、

Spark學習之路 (十二)SparkCore的調資源調

限制 無法 數據 block 可能 executors 頻繁 通過 操作 摘抄自:https://tech.meituan.com/spark-tuning-basic.html 一、概述 在開發完Spark作業之後,就該為作業配置合適的資源了。Spark的資源參數,基

Spark學習之路 (十四)SparkCore的調資源調JVM的GC垃圾收集器

當前 復制 event 只需要 引用 應用 之前 相互 分享 一、概述 垃圾收集 Garbage Collection 通常被稱為“GC”,它誕生於1960年 MIT 的 Lisp 語言,經過半個多世紀,目前已經十分成熟了。 jvm 中,程序計數

JVM調總結(十)-調方法

JVM調優工具 Jconsole,jProfile,VisualVM   Jconsole : jdk自帶,功能簡單,但是可以在系統有一定負荷的情況下使用。對垃圾回收演算法有很詳細的跟蹤。詳細說明參考這裡   JProfiler:商業軟體,需要付費。

轉 Spark效能優化:資源調

前言 在開發完Spark作業之後,就該為作業配置合適的資源了。Spark的資源引數,基本都可以在spark-submit命令中作為引數設定。很多Spark初學者,通常不知道該設定哪些必要的引數,以及如何設定這些引數,最後就只能胡亂設定,甚至壓根兒不設定。資源引數設定的不合理,可能會導致沒

Spark效能優化:資源調

在開發完Spark作業之後,就該為作業配置合適的資源了。Spark的資源引數,基本都可以在spark-submit命令中作為引數設定。很多Spark初學者,通常不知道該設定哪些必要的引數,以及如何設定這些引數,最後就只能胡亂設定,甚至壓根兒不設定。資源引數設定的不合理,可能會

超引數調方法:網格搜尋、隨機搜尋、貝葉斯優化演算法

網格搜尋: 網格搜尋可能是最簡單、應用最廣泛的超引數搜尋演算法,它通過查詢搜尋範圍內的所有的點來確定最優值。但是,這種搜尋方案十分消耗計算資源和時間,特別是需要調優的超引數比較多的時候。 在實際應用中,網格搜尋法一般會先使用較廣的搜尋範圍和較大的步長,來尋找全域性最優值可

一般專案常用效能調方法(三)

靜態檔案優化靜態檔案優化主要是指對檔案大小的優化。檔案大小往往被很多開發人員忽略,但對於頻寬有限(公網專案)或者硬體裝置(主要是交換機)老舊的環境,檔案大小往往是效能的最大瓶頸。試想一個index.ac

一般專案常用效能調方法(二)

功能優化從功能設計上,避免一次性載入大量資料。遇到一次性載入大量資料的,通過以下問題尋找功能優化方式:1.       設定預設查詢條件,僅載入部分資料。如對於監測資料的查詢分析,可預設僅查詢當天或當月

spark資源調

spark資源調優 所謂的Spark資源引數調優,其實主要就是對Spark執行過程中各個使用資源的地方,通過調節各種引數,來優化資源使用的效率,從而提升Spark作業的執行效能。以下引數就是Spark中主要的資源引數,每個引數都對應著作業執行原理中的某個部分,我們同時也給出了一個調優

Spark效能優化篇一:資源調

Spark效能優化 篇一 :資源調優      所謂的Spark資源引數調優,其實主要就是對Spark執行過程中各個使用資源的地方,通過調節各種引數,來優化資源使用的效率,從而提升Spark作業的執行效能。以下引數就是Spark中主要的資源引數

關於Java虛擬機器效能調方法的一些分析

關於效能調優: 1 需要一個性能探測器,找到呼叫最頻繁的程式碼段,優化這部分程式碼(優化演算法) 2 往往1%的程式碼執行時間佔99%。所以優化這些程式碼就能事半功倍。 3 最好是能看懂編譯後的程式碼,這樣分析最徹底。 Java的效能分析使用JProfiler 堆疊分析使用的Jstack Java效能調優 S

Hadoop效能調方法

當我們寫完一個MR程式之後,我們希望能夠加快程式的執行速度,那麼怎麼進行效能的調優呢,有如下幾種方法? 1、mapper的數量 適當調整mapper的數量,使得每個mapper的執行時間在1分鐘為宜。因為mapper數量過小,則會導致整體速度過慢。太多則導致

【機器學習】【線性迴歸】梯度下降的三種方式(BGD+SGD+MSGD)以及三種調方法(加快收斂速度)

1.梯度下降演算法梯度下降演算法的核心思路和公式推導,可以詳見前面的文章:梯度下降演算法的核心思路和公式推導如果代價函式是凸函式,用梯度下降演算法一定可以求得最優解。2.梯度下降的三種方式在ML中,梯度下降有三種方式:1)批量梯度下降(Batch Gradient  Desc

【轉】JVM調總結(十)-調方法

JVM調優工具 Jconsole,jProfile,VisualVM Jconsole : jdk自帶,功能簡單,但是可以在系統有一定負荷的情況下使用。對垃圾回收演算法有很詳細的跟蹤。詳細說明參考這裡 JProfiler:商業軟體,需要付費。功能強大。