java - 生产高峰期的 java.net.SocketTimeoutException
问题描述
我们在 Prodcution 上一直面临这个问题。现在,只要向所有移动应用程序和桌面应用程序推出通知,就会出现此问题。在通知中,有一张图片缓存在 CDN(Akamai) 中。所以很多用户都遇到了以下异常。我试图找出问题,但很多人说这可能是由于设备上的网络问题,但我的问题是 XXXX.XXXX.com 的 DNS 已解析为 akamai ip (117.239.141.27)。所以,这应该不是问题。此外,我与 Akamai 的人一起工作,他们最终找不到任何问题。所以,我有以下问题:
1)我如何找出导致问题的原因?其次,有没有人在高峰流量的生产中遇到过类似的问题?
2) 正如我从 crashlytics 获得的以下堆栈跟踪中所述。在少数情况下,我们会获得私有客户端 ip (192.168.1.33) 为什么会这样?不应将客户端的公共 ip 记录在 crashlytics 中。
Caused by java.net.SocketTimeoutException: failed to connect to XXXX.XXXX.com/117.239.141.27 (port 80) from /192.168.1.33 (port 50974) after 15000ms
at libcore.io.IoBridge.connectErrno(IoBridge.java:185)
at libcore.io.IoBridge.connect(IoBridge.java:129)
at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:137)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:390)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:230)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436)
at java.net.Socket.connect(Socket.java:621)
at com.android.okhttp.internal.Platform.connectSocket(Platform.java:145)
at com.android.okhttp.internal.io.RealConnection.connectSocket(RealConnection.java:1416)
at com.android.okhttp.internal.io.RealConnection.connect(RealConnection.java:1368)
at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:219)
at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:142)
at com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:104)
at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:392)
at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:325)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:488)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:434)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:565)
at com.squareup.picasso.UrlConnectionDownloader.load(UrlConnectionDownloader.java:125)
at com.squareup.picasso.NetworkRequestHandler.load$71fa0c91(NetworkRequestHandler.java:6)
at com.squareup.picasso.BitmapHunter.hunt(BitmapHunter.java:72)
at com.XXXXX.XXXXX.utils.AppNotificationHandler.getTabCategoryIdForScreen(AppNotificationHandler.java:82)
at com.XXXXX.XXXXX.utils.AppNotificationHandler.handleExtras(AppNotificationHandler.java:806)
at com.XXXXX.XXXXX.fcm.FCMIntentService.onMessageReceived(FCMIntentService.java:112)
at com.google.firebase.messaging.FirebaseMessagingService.zzd(FirebaseMessagingService.java:394)
at com.google.firebase.iid.zzg.run(zzg.java:26)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at com.google.android.gms.common.util.concurrent.zza.run(zza.java:7)
at java.lang.Thread.run(Thread.java:764)
解决方案
推荐阅读
- kubernetes - 确保适当设置 kubelet-certificate-authority 参数
- node.js - Nextjs process.env 变量附加 git 安装路径
- node.js - 在 awilix 中模拟已注册的解析器
- c - 如何在c中计算我的代码的运行时间
- javascript - 更改对象上的深层嵌套属性,但混合了数组
- jmx - 将 mm jmx 指标集成到 check_mk
- machine-learning - 有些人如何在 Pytorch 中有效地将树神经网络转换为 Dag 神经网络,并且没有后向传递错误?
- file - “复制”会犯什么样的错误?
- c# - 无缘无故退出账户
- c - 缓存模拟