com.mongodb.MongoException$Network: Write operation to server mongodb.kyfxbl.net/127.0.0.1:4444 failed on database yilos at com.mongodb.DBTCPConnector.say(DBTCPConnector.java:153) at com.mongodb.DBTCPConnector.say(DBTCPConnector.java:115) at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:248) at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:204) at com.mongodb.DBCollection.insert(DBCollection.java:76) at com.mongodb.DBCollection.insert(DBCollection.java:60) at com.mongodb.DBCollection.insert(DBCollection.java:105) at com.yilos.mongo.HATester$1.run(HATester.java:36) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317) at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:180) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:204) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662) Caused by: java.net.SocketException: Broken pipe at java.net.SocketOutputStream.socketWrite0(Native Method) at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92) at java.net.SocketOutputStream.write(SocketOutputStream.java:136) at org.bson.io.PoolOutputBuffer.pipe(PoolOutputBuffer.java:129) at com.mongodb.OutMessage.pipe(OutMessage.java:236) at com.mongodb.DBPort.go(DBPort.java:133) at com.mongodb.DBPort.go(DBPort.java:106) at com.mongodb.DBPort.findOne(DBPort.java:162) at com.mongodb.DBPort.runCommand(DBPort.java:170) at com.mongodb.DBTCPConnector._checkWriteError(DBTCPConnector.java:100) at com.mongodb.DBTCPConnector.say(DBTCPConnector.java:142) ... 16 more
可以发现,实际上这并不是mongo的问题,而是这段测试代码的BUG引发的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
Runnable task = new Runnable() {
private int i = 0;
@Override public void run() { DB db = client.getDB("yilos"); DBCollection collection = db.getCollection("test"); DBObject o = new BasicDBObject("name", "MongoDB" + i).append("count", i); try { collection.insert(o); } catch (Exception exc) { exc.printStackTrace(); }