2021-04-18 15:41:13 -04:00
// Copyright (c) 2015-2021 MinIO, Inc.
//
// This file is part of MinIO Object Storage stack
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
2017-03-02 00:51:57 -05:00
package cmd
2017-10-03 13:37:45 -04:00
import (
2021-09-08 16:31:51 -04:00
"runtime"
2017-10-03 13:37:45 -04:00
"runtime/debug"
2021-08-24 12:14:46 -04:00
"github.com/minio/minio/internal/logger"
2021-05-28 18:17:01 -04:00
"github.com/minio/pkg/sys"
2017-10-03 13:37:45 -04:00
)
2017-03-02 00:51:57 -05:00
2017-03-02 13:34:37 -05:00
func setMaxResources ( ) ( err error ) {
2017-10-03 13:37:45 -04:00
// Set the Go runtime max threads threshold to 90% of kernel setting.
sysMaxThreads , mErr := sys . GetMaxThreads ( )
if mErr == nil {
minioMaxThreads := ( sysMaxThreads * 90 ) / 100
// Only set max threads if it is greater than the default one
if minioMaxThreads > 10000 {
debug . SetMaxThreads ( minioMaxThreads )
}
}
2017-03-02 13:34:37 -05:00
var maxLimit uint64
// Set open files limit to maximum.
if _ , maxLimit , err = sys . GetMaxOpenFileLimit ( ) ; err != nil {
return err
}
2021-09-08 16:31:51 -04:00
if maxLimit < 4096 && runtime . GOOS != globalWindowsOSName {
2021-08-24 12:14:46 -04:00
logger . Info ( "WARNING: maximum file descriptor limit %d is too low for production servers. At least 4096 is recommended. Fix with \"ulimit -n 4096\"" , maxLimit )
}
2017-03-02 13:34:37 -05:00
if err = sys . SetMaxOpenFileLimit ( maxLimit , maxLimit ) ; err != nil {
return err
}
// Set max memory limit as current memory limit.
if _ , maxLimit , err = sys . GetMaxMemoryLimit ( ) ; err != nil {
2017-03-02 00:51:57 -05:00
return err
}
2017-03-02 13:34:37 -05:00
err = sys . SetMaxMemoryLimit ( maxLimit , maxLimit )
return err
2017-03-02 00:51:57 -05:00
}