mirror of
https://github.com/minio/minio.git
synced 2024-12-23 21:55:53 -05:00
Push max threads to little less than kernel limit (#5001)
Let Minio server use more threads than allowed by golang runtime. This is important to better deal with high load.
This commit is contained in:
parent
a4f26aec00
commit
53f3d2fd65
@ -16,9 +16,24 @@
|
||||
|
||||
package cmd
|
||||
|
||||
import "github.com/minio/minio/pkg/sys"
|
||||
import (
|
||||
"runtime/debug"
|
||||
|
||||
"github.com/minio/minio/pkg/sys"
|
||||
)
|
||||
|
||||
func setMaxResources() (err error) {
|
||||
// Set the Go runtime max threads threshold to 90% of kernel setting.
|
||||
// Do not return when an error when encountered since it is not a crucial task.
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
||||
var maxLimit uint64
|
||||
|
||||
// Set open files limit to maximum.
|
||||
|
38
pkg/sys/threads.go
Normal file
38
pkg/sys/threads.go
Normal file
@ -0,0 +1,38 @@
|
||||
// +build linux
|
||||
|
||||
/*
|
||||
* Minio Cloud Storage, (C) 2017 Minio, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package sys
|
||||
|
||||
import (
|
||||
"io/ioutil"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// GetMaxThreads returns the maximum number of threads that the system can create.
|
||||
func GetMaxThreads() (int, error) {
|
||||
sysMaxThreadsStr, err := ioutil.ReadFile("/proc/sys/kernel/threads-max")
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
sysMaxThreads, err := strconv.Atoi(strings.TrimSpace(string(sysMaxThreadsStr)))
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return sysMaxThreads, nil
|
||||
}
|
26
pkg/sys/threads_other.go
Normal file
26
pkg/sys/threads_other.go
Normal file
@ -0,0 +1,26 @@
|
||||
// +build !linux
|
||||
|
||||
/*
|
||||
* Minio Cloud Storage, (C) 2017 Minio, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package sys
|
||||
|
||||
import "errors"
|
||||
|
||||
// GetMaxThreads returns the maximum number of threads that the system can create.
|
||||
func GetMaxThreads() (int, error) {
|
||||
return 0, errors.New("getting max threads is not supported")
|
||||
}
|
Loading…
Reference in New Issue
Block a user