使用 2 个 CPU 的 Go 服务器
Go server with 2 cpus
我正在 GO 中构建一个 GRPC 服务器,我想提高它的性能。我增加了我的机器并放置了 2CPUS 以使其更好,但我注意到我的服务器没有使用所有 cpu 核心,我找不到修复它的方法(我已经 运行 进行了一些测试来让服务器工作人员更加努力)。似乎我的服务器经常使用 1 cpu 而另一个没有。我的平均负载保持在 1 以上,这意味着我的服务器充满了请求,但是当我在 netdata 中看到性能时,只有一个 CPU 在工作。
这是我的 grpc 代码:
package main
import (
"fmt"
"runtime"
"log"
"net"
"google.golang.org/grpc"
"golang.org/x/net/context"
"google.golang.org/grpc/reflection"
pb "teste/prototeste"
)
func (s *server) Test(ctx context.Context, n *pb.TestRequest) (*pb.TestReply, error){
return &pb.TestReply{Message: n.Name}, nil
}
type server struct{}
const (
port = ":50051"
)
func main(){
numOfCores := runtime.NumCPU()
fmt.Println(numOfCores)
runtime.GOMAXPROCS(numOfCores)
lis, err := net.Listen("tcp", port)
if err != nil {
log.Fatalf("failed to listen: %v", err)
}
s := grpc.NewServer()
pb.RegisterGreeterServer(s, &server{})
// Register reflection service on gRPC server.
reflection.Register(s)
s.Serve(lis)
}
请注意,在 Serve 函数中有一个 goroutine 允许服务器并行接受多个请求。
This is my cpu usage
关于如何解决这个问题并使我的服务器使用 2 cpus 的任何提示?
在 gRPC 中,每个服务器处理程序都在自己的 goroutine 中运行。从那里由 Go 调度程序决定将它们调度到哪些 CPUs 上。根据您的服务器处理程序正在做什么、系统负载等,它们可能最终都安排在同一个 CPU.
我正在 GO 中构建一个 GRPC 服务器,我想提高它的性能。我增加了我的机器并放置了 2CPUS 以使其更好,但我注意到我的服务器没有使用所有 cpu 核心,我找不到修复它的方法(我已经 运行 进行了一些测试来让服务器工作人员更加努力)。似乎我的服务器经常使用 1 cpu 而另一个没有。我的平均负载保持在 1 以上,这意味着我的服务器充满了请求,但是当我在 netdata 中看到性能时,只有一个 CPU 在工作。
这是我的 grpc 代码:
package main
import (
"fmt"
"runtime"
"log"
"net"
"google.golang.org/grpc"
"golang.org/x/net/context"
"google.golang.org/grpc/reflection"
pb "teste/prototeste"
)
func (s *server) Test(ctx context.Context, n *pb.TestRequest) (*pb.TestReply, error){
return &pb.TestReply{Message: n.Name}, nil
}
type server struct{}
const (
port = ":50051"
)
func main(){
numOfCores := runtime.NumCPU()
fmt.Println(numOfCores)
runtime.GOMAXPROCS(numOfCores)
lis, err := net.Listen("tcp", port)
if err != nil {
log.Fatalf("failed to listen: %v", err)
}
s := grpc.NewServer()
pb.RegisterGreeterServer(s, &server{})
// Register reflection service on gRPC server.
reflection.Register(s)
s.Serve(lis)
}
请注意,在 Serve 函数中有一个 goroutine 允许服务器并行接受多个请求。
This is my cpu usage
关于如何解决这个问题并使我的服务器使用 2 cpus 的任何提示?
在 gRPC 中,每个服务器处理程序都在自己的 goroutine 中运行。从那里由 Go 调度程序决定将它们调度到哪些 CPUs 上。根据您的服务器处理程序正在做什么、系统负载等,它们可能最终都安排在同一个 CPU.