diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9c7d0f50796580e6b3ce207fef7a008921e5aad9..5a4552698554757797e796a75ed844cafd7557cd 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,7 @@
 
 ### Features
 - [#976](https://github.com/influxdata/telegraf/pull/976): Reduce allocations in the UDP and statsd inputs.
+- [#979](https://github.com/influxdata/telegraf/pull/979): Reduce allocations in the TCP listener.
 
 ### Bugfixes
 - [#968](https://github.com/influxdata/telegraf/issues/968): Processes plugin gets unknown state when spaces are in (command name)
diff --git a/plugins/inputs/tcp_listener/tcp_listener.go b/plugins/inputs/tcp_listener/tcp_listener.go
index a1b991058708d1bc73b1866049eb5fa2f5aa0e52..4559a3bf5ab7c273653c66a749a1f7aef7c05b46 100644
--- a/plugins/inputs/tcp_listener/tcp_listener.go
+++ b/plugins/inputs/tcp_listener/tcp_listener.go
@@ -39,7 +39,7 @@ type TcpListener struct {
 	acc    telegraf.Accumulator
 }
 
-var dropwarn = "ERROR: Message queue full. Discarding line [%s] " +
+var dropwarn = "ERROR: Message queue full. Discarding metric. " +
 	"You may want to increase allowed_pending_messages in the config\n"
 
 const sampleConfig = `
@@ -202,11 +202,10 @@ func (t *TcpListener) handler(conn *net.TCPConn, id string) {
 			if !scanner.Scan() {
 				return
 			}
-			buf := scanner.Bytes()
 			select {
-			case t.in <- buf:
+			case t.in <- scanner.Bytes():
 			default:
-				log.Printf(dropwarn, string(buf))
+				log.Printf(dropwarn)
 			}
 		}
 	}
@@ -215,11 +214,12 @@ func (t *TcpListener) handler(conn *net.TCPConn, id string) {
 // tcpParser parses the incoming tcp byte packets
 func (t *TcpListener) tcpParser() error {
 	defer t.wg.Done()
+	var packet []byte
 	for {
 		select {
 		case <-t.done:
 			return nil
-		case packet := <-t.in:
+		case packet = <-t.in:
 			if len(packet) == 0 {
 				continue
 			}