Mein Server läuft gut in der Produktionsumgebung, als er vorgestern in Panik geraten ist.rpc sendResponse panic: reflect: Aufruf von reflect.Value.Int auf ptr
Ich habe ein Problem im Go Forum gepostet und jemand hat mir gesagt, dass ich Race Detection machen soll.
Ich sehe net/rpc. (* Server) .sendResponse ist Thread sicher.
Gibt es etwas falsch mit sendresponse in rpc Paket
In meinem Code Antwort nur ein * int ist und nicht alles funktionell tun, so habe ich keine Ahnung, mit dieser Panik:
panic: reflect: call of reflect.Value.Int on ptr Value [recovered]
panic: reflect: call of reflect.Value.Int on ptr Value
goroutine 52598456 [running]:
encoding/gob.catchError(0xc4209e10d0)
/root/go/src/encoding/gob/error.go:38 +0x95
panic(0xc40860, 0xc42606ad00)
/root/go/src/runtime/panic.go:489 +0x2cf
reflect.Value.Int(0xbcdec0, 0xc4251fe520, 0x196, 0x196)
/root/go/src/reflect/value.go:902 +0xb5
encoding/gob.encInt(0xc423ab4ae0, 0xc422da1e40, 0xbcdec0, 0xc4251fe520, 0x196)
/root/go/src/encoding/gob/encode.go:188 +0x43
encoding/gob.(*Encoder).encodeStruct(0xc4209e1040, 0xc4209e1078, 0xc421a28a20, 0xcc1be0, 0xc4251fe510, 0x199)
/root/go/src/encoding/gob/encode.go:334 +0x256
encoding/gob.(*Encoder).encode(0xc4209e1040, 0xc4209e1078, 0xcc1be0, 0xc4251fe510, 0x199, 0xc4209c3480)
/root/go/src/encoding/gob/encode.go:707 +0x1d3
encoding/gob.(*Encoder).EncodeValue(0xc4209e1040, 0xc95bc0, 0xc4251fe510, 0x16, 0x0, 0x0)
/root/go/src/encoding/gob/encoder.go:250 +0x3ab
encoding/gob.(*Encoder).Encode(0xc4209e1040, 0xc95bc0, 0xc4251fe510, 0x0, 0x0)
/root/go/src/encoding/gob/encoder.go:175 +0x61
net/rpc.(*gobServerCodec).WriteResponse(0xc422b51ec0, 0xc422d737d0, 0xc95bc0, 0xc4251fe510, 0xc422b43a40, 0xc422b4a350)
/root/go/src/net/rpc/server.go:424 +0x1dd
net/rpc.(*Server).sendResponse(0xc420055680, 0xc422b45aa0, 0xc421c4ff00, 0xc95bc0, 0xc4251fe510, 0x1334ac0, 0xc422b51ec0, 0x0, 0x0)
/root/go/src/net/rpc/server.go:366 +0x130
net/rpc.(*service).call(0xc422afe900, 0xc420055680, 0xc422b45aa0, 0xc422b4ec00, 0xc421c4ff00, 0xbc3800, 0xc427ab07e0, 0x16, 0xc95bc0, 0xc4251fe510, ...)
/root/go/src/net/rpc/server.go:394 +0x22e
created by net/rpc.(*Server).ServeCodec
/root/go/src/net/rpc/server.go:481 +0x404
type RpcArgs struct{ A string B int32 C string D int32 E String F int32 G int32 H int32 I bool J string K int32 L String M int32 N int32 O int32 P bool }
func RPC1(args *RpcArgs, reply *int) error{ //some simple logic with args, do noting with reply //do another async rpc call,may be this is useless var reply2 int rpc.Client.Go(serviceMethod, args, &reply2, make(chan *rpc.Call, 1)) return nil }
Der Quellcode wie that.reply * int direkt zurück, die in RPC1 nicht verändert
Führen Sie den Renndetektor aus. Versuchen Sie dann zu überprüfen, welche Daten das ausgelöst haben - vielleicht hatten Sie ungewöhnliche Daten, die die Panik verursacht haben? Sie müssen wahrscheinlich Code an der Stelle des Fehlers zur Verfügung stellen, damit jemand helfen kann. Ich würde versuchen, es zuerst zu reproduzieren. –
@KennyGrant, der Code in diesem Kommentar ist nicht das richtige Format, also poste ich es unten, danke ~ – Prinny