aliyun / aliyun-oss-csharp-sdk

Aliyun OSS SDK for C#
MIT License
379 stars 204 forks source link

【PTS压测超时】压测超过250QPS时,简单上传开始出现大量失败 #119

Closed FindSunny closed 3 years ago

FindSunny commented 3 years ago

https://github.com/aliyun/aliyun-oss-csharp-sdk/blob/d71ca46514a26e3a9f66c7e970637d8e0fa8e6d8/samples/Samples/PutObjectSample.cs#L56

代码逻辑如下:

public static string PutObjectToOss(Stream fs)
        {
            var guidStr = Guid.NewGuid().ToString("N");
            var randName = guidStr.Substring(3, 5);
            var filename = $"shopguide/imageCreateZhao1/{guidStr}.jpg";

            Stopwatch sw = new Stopwatch();
            sw.Start();
            var res = client.PutObject(bucketName, filename, fs);
            sw.Stop();

            if (res.HttpStatusCode.ToString() == "OK")
                return $"{alidomain}{filename}";
            return string.Empty;
        }
## 报错如下:
2021-01-07 14:45:11.9839 [Error]:uploadImage失败:One or more errors occurred. (A task was canceled.)   
   at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
   at Aliyun.OSS.Common.Communication.ServiceClientNewImpl.SendCore(ServiceRequest request, ExecutionContext context)
   at Aliyun.OSS.Common.Communication.ServiceClient.Send(ServiceRequest request, ExecutionContext context)
   at Aliyun.OSS.Common.Communication.RetryableServiceClient.SendImpl(ServiceRequest request, ExecutionContext context, Int32 retryTimes)
   at Aliyun.OSS.Commands.OssCommand.Execute()
   at Aliyun.OSS.OssClient.PutObject(PutObjectRequest putObjectRequest)
   at CRM.ShopGuide.Common.AliOSSHelper.PutObjectToOss(Stream fs) in /data/code/xxx_imageCreate/CRM.ShopGuide.Common/AliOSSHelper.cs:line 289
   at CRM.ShopGuide.ImageCreate.Service.ImageCreateService.uploadImage55(Stream fs) in /data/code/xxx_imageCreate/CRM.ShopGuide.ImageCreate/Service/ImageCreateService.cs:line 485 
wannvmi commented 3 years ago

我也遇到了相似的问题

System.AggregateException: One or more errors occurred. (An error occurred while sending the request.)
 ---> System.Net.Http.HttpRequestException: An error occurred while sending the request.
 ---> System.IO.IOException: The response ended prematurely.
   at System.Net.Http.HttpConnection.SendAsyncCore(HttpRequestMessage request, CancellationToken cancellationToken)
   --- End of inner exception stack trace ---
   at System.Net.Http.HttpConnection.SendAsyncCore(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Net.Http.HttpConnectionPool.SendWithNtConnectionAuthAsync(HttpConnection connection, HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)
   at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)
   at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Net.Http.HttpClient.FinishSendAsyncUnbuffered(Task`1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts)
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
   at Aliyun.OSS.Common.Communication.ServiceClientNewImpl.SendCore(ServiceRequest request, ExecutionContext context)
   at Aliyun.OSS.Common.Communication.ServiceClient.Send(ServiceRequest request, ExecutionContext context)
   at Aliyun.OSS.Common.Communication.RetryableServiceClient.SendImpl(ServiceRequest request, ExecutionContext context, Int32 retryTimes)
   at Aliyun.OSS.Commands.OssCommand.Execute()
   at Aliyun.OSS.OssClient.PutObject(PutObjectRequest putObjectRequest)
FindSunny commented 3 years ago

我也遇到了相似的问题

System.AggregateException: One or more errors occurred. (An error occurred while sending the request.)
 ---> System.Net.Http.HttpRequestException: An error occurred while sending the request.
 ---> System.IO.IOException: The response ended prematurely.
   at System.Net.Http.HttpConnection.SendAsyncCore(HttpRequestMessage request, CancellationToken cancellationToken)
   --- End of inner exception stack trace ---
   at System.Net.Http.HttpConnection.SendAsyncCore(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Net.Http.HttpConnectionPool.SendWithNtConnectionAuthAsync(HttpConnection connection, HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)
   at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)
   at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Net.Http.HttpClient.FinishSendAsyncUnbuffered(Task`1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts)
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
   at Aliyun.OSS.Common.Communication.ServiceClientNewImpl.SendCore(ServiceRequest request, ExecutionContext context)
   at Aliyun.OSS.Common.Communication.ServiceClient.Send(ServiceRequest request, ExecutionContext context)
   at Aliyun.OSS.Common.Communication.RetryableServiceClient.SendImpl(ServiceRequest request, ExecutionContext context, Int32 retryTimes)
   at Aliyun.OSS.Commands.OssCommand.Execute()
   at Aliyun.OSS.OssClient.PutObject(PutObjectRequest putObjectRequest)

哥们解决了么,最后我们是改了配置 image

FindSunny commented 3 years ago

我也遇到了相似的问题

System.AggregateException: One or more errors occurred. (An error occurred while sending the request.)
 ---> System.Net.Http.HttpRequestException: An error occurred while sending the request.
 ---> System.IO.IOException: The response ended prematurely.
   at System.Net.Http.HttpConnection.SendAsyncCore(HttpRequestMessage request, CancellationToken cancellationToken)
   --- End of inner exception stack trace ---
   at System.Net.Http.HttpConnection.SendAsyncCore(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Net.Http.HttpConnectionPool.SendWithNtConnectionAuthAsync(HttpConnection connection, HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)
   at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)
   at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Net.Http.HttpClient.FinishSendAsyncUnbuffered(Task`1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts)
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
   at Aliyun.OSS.Common.Communication.ServiceClientNewImpl.SendCore(ServiceRequest request, ExecutionContext context)
   at Aliyun.OSS.Common.Communication.ServiceClient.Send(ServiceRequest request, ExecutionContext context)
   at Aliyun.OSS.Common.Communication.RetryableServiceClient.SendImpl(ServiceRequest request, ExecutionContext context, Int32 retryTimes)
   at Aliyun.OSS.Commands.OssCommand.Execute()
   at Aliyun.OSS.OssClient.PutObject(PutObjectRequest putObjectRequest)

哥们解决了么,最后我们是改了配置 image

conf.UseNewServiceClient = false; conf.PreReadBufferCount = 4096;