diff --git a/src/box/iproto.cc b/src/box/iproto.cc
index b5f31c2059e582357698c2e1874659d72a124fd6..cb60c0188373f0236fbfecbf55ca5440a0c2f4a2 100644
--- a/src/box/iproto.cc
+++ b/src/box/iproto.cc
@@ -522,7 +522,8 @@ iproto_connection_on_input(ev_loop *loop, struct ev_io *watcher,
 static inline struct iobuf *
 iproto_connection_output_iobuf(struct iproto_connection *con)
 {
-	if (obuf_size(&con->iobuf[1]->out))
+	if (obuf_size(&con->iobuf[1]->out) &&
+	    obuf_size(&con->iobuf[1]->out) > con->write_pos.size)
 		return con->iobuf[1];
 	/*
 	 * Don't try to write from a newer buffer if an older one
@@ -531,7 +532,8 @@ iproto_connection_output_iobuf(struct iproto_connection *con)
 	 * pieces of replies from both buffers.
 	 */
 	if (ibuf_size(&con->iobuf[1]->in) == 0 &&
-	    obuf_size(&con->iobuf[0]->out))
+	    obuf_size(&con->iobuf[0]->out) &&
+	    obuf_size(&con->iobuf[0]->out) > con->write_pos.size)
 		return con->iobuf[0];
 	return NULL;
 }
diff --git a/src/lua/fiber.cc b/src/lua/fiber.cc
index e983700ac09154f48537aca803328faf63191cbd..85c4d8cddc85bc20db5c4b3beaba9997bdf47f05 100644
--- a/src/lua/fiber.cc
+++ b/src/lua/fiber.cc
@@ -239,6 +239,17 @@ lbox_fiber_statof(struct fiber *f, void *cb_ctx)
 	lua_pushnumber(L, f->csw);
 	lua_settable(L, -3);
 
+	lua_pushliteral(L, "memory");
+	lua_newtable(L);
+	lua_pushstring(L, "used");
+	lua_pushnumber(L, region_used(&f->gc));
+	lua_settable(L, -3);
+	lua_pushstring(L, "total");
+	lua_pushnumber(L, region_total(&f->gc) + f->coro.stack_size +
+		       sizeof(struct fiber));
+	lua_settable(L, -3);
+	lua_settable(L, -3);
+
 #ifdef ENABLE_BACKTRACE
 	lua_pushstring(L, "backtrace");
 	lua_newtable(L);