Sunucu Performans Modu (aka perfmode
veya serverperfmode
) bir dizi çekirdek parametresini değiştirir, çok daha yüksek sınırlar sağlamak ve böylece çok daha fazla işlemin çalışmasını, dosyaların açılmasını ve ağ bağlantılarının etkinleştirilmesini sağlamak için çekirdek için çok daha fazla bellek ayırır diğer şeylerin yanında. Tüm parametreler, takılı bellek miktarı sınırlar dahilinde ölçeklenir ve en az 16 GiB bellek yüklü olmadığı sürece hiçbir şey değişmez . @ klanomath'ın numaraları 16 GiB belleğin yüklü olmasına karşılık gelir.
Apple'ın eski bir destek belgesinden Sunucu 10.6 hakkında kısa bir açıklama :
- Takılı her 8 GB bellek için 2500 işlem ve 150.000 vod kullanılabilir.
- Maksimum iş parçacığı sayısı, maksimum işlem sayısının beş katı (5x) olarak ayarlanır. (Bu artık doğru gibi görünmüyor)
- Tek bir kullanıcı kimliği (uid) maksimum işlem sayısının% 75'ini kullanabilir.
- Tek bir işlem maksimum evre değerinin% 20'sine kadar tahsis edebilir.
48 GiB bellekli performans modunda şunu görüyorum:
kern.maxvnodes: 900000
kern.maxproc: 15000
kern.maxprocperuid: 11250
kern.num_tasks: 15000
kern.num_taskthreads: 15000
kern.num_threads: 75000
kern.maxfiles: 900000
kern.maxfilesperproc: 450000
kern.ipc.maxsockbuf:8388608
kern.ipc.somaxconn: 2048
kern.ipc.nmbclusters: 131072
kern.ipc.sbmb_cnt_peak: # This parameter is not in my kernel
kern.ipc.njcl: 43688
...
kern.timer.longterm.qlen: 0 # same
kern.timer.longterm.threshold: 0 # same
...
net.inet.ip.maxfragpackets: 4096
...
net.inet.tcp.tcbhashsize: 32768
net.inet.tcp.fastopen_backlog: 600
...
net.inet6.ip6.maxfragpackets: 4096
net.inet6.ip6.maxfrags: 8192
Gerçekten içine girmek istiyorsanız, gerçek kodu okuyabilirsiniz. Aşağıda El Capitan 10.11.6'dan alınmıştır. Sunucu modu hala aynı (OS X 10.14 Mojave'den olan en son yayınlanan koda kadar), ancak en az 12 GiB belleğiniz varsa normal mod OS X 10.13 High Sierra'da başlayarak bir performans artışı aldı (değişiklikler dahil koddaki yorumlarda).
scale_seutp
Yukarı fonksiyon setleri scale
faktör olarak floor(memsize / 8 GiB)
size Sunucu Performans Modu etkin ve bellek en az 16 GiB yüklü varsa. Aksi takdirde, en az 3 GiB belleğiniz olmadığı sürece sıfırdır, bu durumda 2 veya High Sierra ile başlayarak , memsize / 4 GiB. ( task_max
Kod pasajının başlangıcındaki değer , çekirdek oluşturulduğunda ayarlanır ve OS X dağıtılırken Apple tarafından nasıl ayarlandığı belirsizdir. Muhtemelen 1024.)
typeof(task_max) task_max_base = task_max;
/* Raise limits for servers with >= 16G */
if ((serverperfmode != 0) && ((uint64_t)sane_size >= (uint64_t)(16 * 1024 * 1024 *1024ULL))) {
scale = (int)((uint64_t)sane_size / (uint64_t)(8 * 1024 * 1024 *1024ULL));
/* limit to 128 G */
if (scale > 16)
scale = 16;
task_max_base = 2500;
} else if ((uint64_t)sane_size >= (uint64_t)(3 * 1024 * 1024 *1024ULL))
scale = 2;
/* Starting with OS X 10.13 High Sierra, if more than 8 GiB of memory,
* scale = sane_size / 4 GiB with max of 16 (64 GiB or more)
*/
task_max = MAX(task_max, task_max_base * scale);
if (scale != 0) {
task_threadmax = task_max;
thread_max = task_max * 5;
}
Daha sonra bu scale
faktör bsd_scale_setup
(sadece 64 bit çekirdek için) veya burada High Sierra için uygulanır . Bu, yukarıda tartışılan ve üzerinden görülebilen çekirdek parametrelerini değiştirir sysctl
. Sunucu Performans Modu etkin değilse , ölçeklendirilen tek şeyin High Sierra'ya kadar maxproc
(532 -> 1064) ve maxprocperuid
(266 -> 709) olduğunu maxfiles
ve maxfilesperproc
en az 12 GiB belleğiniz varsa ne zaman ve çarpılacağını unutmayın.
/* The initial value of maxproc here is 532 */
if ((scale > 0) && (serverperfmode == 0)) {
maxproc *= scale;
maxprocperuid = (maxproc * 2) / 3;
/* Starting with OS X 10.13 High Sierra, this clause is added
if (scale > 2) {
maxfiles *= scale;
maxfilesperproc = maxfiles/2;
}
*** end of High Sierra addition */
}
/* Apply server scaling rules */
if ((scale > 0) && (serverperfmode !=0)) {
maxproc = 2500 * scale;
hard_maxproc = maxproc;
/* no fp usage */
maxprocperuid = (maxproc*3)/4;
maxfiles = (150000 * scale);
maxfilesperproc = maxfiles/2;
desiredvnodes = maxfiles;
vnodes_sized = 1;
tcp_tfo_backlog = 100 * scale;
if (scale > 4) {
/* clip somaxconn at 32G level */
somaxconn = 2048;
/*
* For scale > 4 (> 32G), clip
* tcp_tcbhashsize to 32K
*/
tcp_tcbhashsize = 32 *1024;
if (scale > 7) {
/* clip at 64G level */
max_cached_sock_count = 165000;
} else {
max_cached_sock_count = 60000 + ((scale-1) * 15000);
}
} else {
somaxconn = 512*scale;
tcp_tcbhashsize = 4*1024*scale;
max_cached_sock_count = 60000 + ((scale-1) * 15000);
}
}
Son olarak ölçek faktörü de uygulanmaktadır bsd_exec_setup
. Bu, bir işlemi başlatmak için gereken tüm verileri birleştirmek için ne kadar çekirdek belleğinin ayrıldığını yapılandırır. Bir sürecin nasıl olduğu exec
, Unix çekirdeği hakkındaki bir kitapta tam bir bölüme layık olduğu için buraya girmeyeceğim. Bu ayarın üst düzey sonucu, daha büyük bir sayının daha fazla bellek kaplaması, ancak saniyede daha fazla sayıda işlem oluşturulmasına izin vermesidir. (Bu kod şimdiki / Mojave'de aynı kalsa da, etki scale
High Sierra'da nasıl hesaplandığındaki değişiklikle değişti . Yukarıdaki ayrıntıları hatırlayın: High Sierra ve daha sonra, ölçek memory / 4 GiB
normal mod için kabaca ( ) ve ( memory / 8 GiB
) Sunucu moduna bsd_simul_execs
geçtiğinizde aşağı inebilirsiniz.)
switch (scale) {
case 0:
case 1:
bsd_simul_execs = BSD_SIMUL_EXECS;
break;
case 2:
case 3:
bsd_simul_execs = 65;
break;
case 4:
case 5:
bsd_simul_execs = 129;
break;
case 6:
case 7:
bsd_simul_execs = 257;
break;
default:
bsd_simul_execs = 513;
break;
}
bsd_pageable_map_size = (bsd_simul_execs * BSD_PAGEABLE_SIZE_PER_EXEC);
El Capitan için şimdiki / Mojave aracılığıyla, bu BSD_PAGEABLE_SIZE_PER_EXEC = 264 * 1024
yüzden 48 GiB Mac'im için çekirdek, ortaya çıkacak yeni süreçler kurmak için arabellek alanı olarak yaklaşık 67 MiB bellek ayıracak. Bir yandan, bu bir web sunucusu için bile çılgın bir rakam. Öte yandan, 67 MiB, makinedeki 48 GiB'ye kıyasla fıstıktır.
Dolayısıyla, Sunucu Performansı Modu daha fazla bellek kaplar ve bazı programların kontrol tüketen kaynaklardan çıkması durumunda sistemin zarar görme olasılığını arttırır, ancak sistemin çok daha fazla arka plan görevini işleme yeteneğini büyük ölçüde artırır. Apple'ın varsayılan olarak açarak değil, aynı zamanda etkinleştirmeyi de kolaylaştırarak doğru aramayı yaptığını düşünüyorum. Yeterli belleğiniz varsa, High Sierra ile normal modda limitleri yükselttiklerinden memnunum. Üzerinde çalışan birçok sunucu programım olduğu için sorunla karşılaştıklarını fark edene kadar tüm bilgisayarlarımda sunucu modunu kapalı bıraktım (ve kapalı bıraktım). Sonuçta, sistem saatini hızlandırmaz, disk hızını arttırmaz ve sadece yüzlerce bağlantınız varsa ağ G / Ç'yi artırır. Orada'
Öte yandan, 2000 işlemi çalıştırmaya gerçekten ihtiyacınız varsa, High Sierra'ya ulaşana kadar tek seçenek sunucu modu. İyi haber şu ki, açmanın, denemenin ve sevmiyorsanız, geri dönün.
sysctl -a
Bu tarafından bildirilen 1100'den fazla belirli öğe olduğundan, sunucu ayarı veya çekirdek parametresi değişikliklerinde yeniyseniz ilk izleyebileceğiniz şeylerin çok güzel bir özeti. Başkalarına yardımcı olması halinde cevaba bazı "görüşler" ekleyeceğim. İfade edilen görüşler size ait değilse lütfen düzenlemelerimi geri alın.