2
私はGOでGRPCサーバを構築していますが、パフォーマンスを向上させたいと思います。私は自分のマシンを増やして、2CPUSを入れてみましたが、私のサーバーがすべてのCPUコアを使用していないことに気づいたので、修正する方法が見つけられませんでした。労働者がより困難)。私のサーバーは1CPUを多く使い、もう1CPUは使っていないようです。私の負荷平均は1を超えています。これは、サーバーに要求が満ちていることを意味しますが、netdataでのパフォーマンスは1つのCPUしかありません。で、サーバーが並行して複数の要求を受け入れることができゴルーチンがあります機能を果たす2 cpusのサーバに移動
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)
}
お知らせ:
これは私のgrpcコードです。
この問題を解決し、2つのCPU、私のサーバーの使用を作成する方法の任意のヒント?
Dockerを使用していますか?仮想マシン? CPUAffinityが設定されたsystemdユニットを使用して起動しますか?おそらく、サーバーのCPUAffinityがuser.sliceの1または2のCPUに設定されている可能性があります。おそらく、あなたのOSカーネルは、接続ハッシュごとにCPUへのネットワークトラフィックを駆動する何らかの設定を使用しており、あなたは1つのIPからテストしているだけかもしれません。 。 。 –
私は1と2の異なるIPで多くのテストを実行し、結果は同じでした。私は仮想マシンを使用しています。このCPUAffinityとは何ですか?私はこれについて知らなかった。 – Vivi
ああ、サーバーがLinuxのcentosで動作しています – Vivi