Просмотр исходного кода

Periodically emit memory metrics

Memory metrics are omitted throughout tunnel establishment, a high resource
usage phase. To further monitor memory usage during the non-establishment
phase, periodically emit memory metrics along side total bytes notices.
Rod Hynes 5 лет назад
Родитель
Сommit
593a3d141f
2 измененных файлов с 7 добавлено и 1 удалено
  1. 3 1
      psiphon/common/parameters/parameters.go
  2. 4 0
      psiphon/tunnel.go

+ 3 - 1
psiphon/common/parameters/parameters.go

@@ -174,6 +174,7 @@ const (
 	UpgradeDownloadURLs                              = "UpgradeDownloadURLs"
 	UpgradeDownloadURLs                              = "UpgradeDownloadURLs"
 	UpgradeDownloadClientVersionHeader               = "UpgradeDownloadClientVersionHeader"
 	UpgradeDownloadClientVersionHeader               = "UpgradeDownloadClientVersionHeader"
 	TotalBytesTransferredNoticePeriod                = "TotalBytesTransferredNoticePeriod"
 	TotalBytesTransferredNoticePeriod                = "TotalBytesTransferredNoticePeriod"
+	TotalBytesTransferredEmitMemoryMetrics           = "TotalBytesTransferredEmitMemoryMetrics"
 	MeekDialDomainsOnly                              = "MeekDialDomainsOnly"
 	MeekDialDomainsOnly                              = "MeekDialDomainsOnly"
 	MeekLimitBufferSizes                             = "MeekLimitBufferSizes"
 	MeekLimitBufferSizes                             = "MeekLimitBufferSizes"
 	MeekCookieMaxPadding                             = "MeekCookieMaxPadding"
 	MeekCookieMaxPadding                             = "MeekCookieMaxPadding"
@@ -436,7 +437,8 @@ var defaultParameters = map[string]struct {
 	UpgradeDownloadURLs:                {value: TransferURLs{}},
 	UpgradeDownloadURLs:                {value: TransferURLs{}},
 	UpgradeDownloadClientVersionHeader: {value: ""},
 	UpgradeDownloadClientVersionHeader: {value: ""},
 
 
-	TotalBytesTransferredNoticePeriod: {value: 5 * time.Minute, minimum: 1 * time.Second},
+	TotalBytesTransferredNoticePeriod:      {value: 5 * time.Minute, minimum: 1 * time.Second},
+	TotalBytesTransferredEmitMemoryMetrics: {value: true},
 
 
 	// The meek server times out inactive sessions after 45 seconds, so this
 	// The meek server times out inactive sessions after 45 seconds, so this
 	// is a soft max for MeekMaxPollInterval,  MeekRoundTripTimeout, and
 	// is a soft max for MeekMaxPollInterval,  MeekRoundTripTimeout, and

+ 4 - 0
psiphon/tunnel.go

@@ -1241,6 +1241,7 @@ func (tunnel *Tunnel) operateTunnel(tunnelOwner TunnelOwner) {
 
 
 			p := tunnel.getCustomParameters()
 			p := tunnel.getCustomParameters()
 			noticePeriod := p.Duration(parameters.TotalBytesTransferredNoticePeriod)
 			noticePeriod := p.Duration(parameters.TotalBytesTransferredNoticePeriod)
+			doEmitMemoryMetrics := p.Bool(parameters.TotalBytesTransferredEmitMemoryMetrics)
 			replayTargetUpstreamBytes := p.Int(parameters.ReplayTargetUpstreamBytes)
 			replayTargetUpstreamBytes := p.Int(parameters.ReplayTargetUpstreamBytes)
 			replayTargetDownstreamBytes := p.Int(parameters.ReplayTargetDownstreamBytes)
 			replayTargetDownstreamBytes := p.Int(parameters.ReplayTargetDownstreamBytes)
 			replayTargetTunnelDuration := p.Duration(parameters.ReplayTargetTunnelDuration)
 			replayTargetTunnelDuration := p.Duration(parameters.ReplayTargetTunnelDuration)
@@ -1248,6 +1249,9 @@ func (tunnel *Tunnel) operateTunnel(tunnelOwner TunnelOwner) {
 			if lastTotalBytesTransferedTime.Add(noticePeriod).Before(time.Now()) {
 			if lastTotalBytesTransferedTime.Add(noticePeriod).Before(time.Now()) {
 				NoticeTotalBytesTransferred(
 				NoticeTotalBytesTransferred(
 					tunnel.dialParams.ServerEntry.GetDiagnosticID(), bytesUp, bytesDown)
 					tunnel.dialParams.ServerEntry.GetDiagnosticID(), bytesUp, bytesDown)
+				if doEmitMemoryMetrics {
+					emitMemoryMetrics()
+				}
 				lastTotalBytesTransferedTime = time.Now()
 				lastTotalBytesTransferedTime = time.Now()
 			}
 			}