On Thu, Jul 19, 2018 at 08:55:33AM +0300, Vitaly Lipatov wrote: > Поскольку на сборочных машинах теперь заданиям теперь выдаётся большое > количество процессов, программы на C++ с множеством модулей, > собирающихся параллельно, могут не влезть в память при компиляции. > > Если написать в спеке > BuildRequires(pre): rpm-build-intro >= 2.1.6 > %_tune_parallel_build_by_procsize 1500 > > то количество используемых при параллельной сборке процессов будет > ограничено с учётом заявленного потребления 1500Мб на процесс, примерно > по такой формуле: > > __nprocs = max(min(round(MAX/NEED)-1,__nprocs),1) > > где MAX и NEED — это объём доступной в системе и требуемой процессом > памяти соответственно. > > Это решение с успехом применил при сборке telegram-desktop, см. > https://bugzilla.altlinux.org/show_bug.cgi?id=35112#c2 Поскольку объём доступной в системе оперативной памяти вы берёте из /proc/meminfo, то вы получаете сильно завышенную оценку (на наших сборочных узлах примерно в 4 раза выше действующего лимита, не считая tmpfs). Другими словами, в вашем примере надо заменить 1500 на 4029, чтобы __nprocs имел шанс уменьшиться. Не вижу смысла так делать, поскольку коэффициент "около 4" может измениться в любой момент. -- ldv