Web API的CPU占用100%
我用Web API做了一个网站,网站很简单,请求就是几个普通的参数,提交到服务器后,在Web API里做一下参数验证,然后去访问Redis里的TIME命令,最后把TIME命令返回的结果计算出yyyy-MM-dd HH:mm:ss的形式,返回JSON格式。
每秒请求数:1500次。
CPU占用100%
内存和IO都比较低。
CPU:E5800
内存:4G+2G
硬盘:普通蓝盘500G
各位,有人遇到过这样的情况吗?
--------------------------------------------------------------------------华丽的分割线-------------------------------------------------------------------------------
测试电脑配置:
CPU:I7-3770
内存:4G+4G
硬盘:SSD
系统:Win7 64位
.Net Framework:4.5
IIS配置:版本:7.5,队列长度:5000,Web园:5个。
关于上面提到的问题,很多人的说法都不太一样,我一个一个整理,排名是乱的,大家别介意:
1、大石头:在这个过程里面,Json的序列化和反序列化是非常耗时的,远远超过普通asp.net处理其实
可以试试。
2、Melas:缓存相同请求的数据
因为我的数据都是不同的,所以没有办法缓存。
3、肖伦军:微软自带的json,不要用第三方的。
可以试试。
4、泥水佬:json也不会差到这程度的,除非服务器配置很低
不到万不得已,我不愿意考虑硬件的问题。
很久以前,在泥水佬的建议下,我用了jetbrains dottrace,测试结果是有一个东西占了百分之九十多的CPU,“ [Native or optimized code] ”,我对这个一直不了解,也不知道这个为什么占这么高的CPU。
根据上面4位的建议,我选择大石头和肖伦军说的json的序列化测试。
源码:
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Runtime.Serialization.Json;
using System.Text;
using Newtonsoft.Json;
using Formatting = System.Xml.Formatting;
namespace TestSerializationConsole
{
class Program
{
static void Main(string[] args)
{
Stopwatch timer = new Stopwatch();
timer.Start();
List<ApiResult> list = new List<ApiResult>();
; i < ; i++)
{
ApiResult result = new ApiResult
{
Code = i,
ErrorMsg = string.Format("当前编号:{0}", i),
IsError = (i % == ),
Time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
Guid = Guid.NewGuid().ToString()
};
list.Add(result);
}
timer.Stop();
Console.WriteLine("共创建{0}项\t共耗时:{1}毫秒", list.Count, timer.ElapsedMilliseconds);
timer.Restart();
);
timer.Stop();
Console.WriteLine("System.Runtime.Serialization.Json序列化{0}项\t共耗时:{1}毫秒", count1, timer.ElapsedMilliseconds);
timer.Restart();
);
timer.Stop();
Console.WriteLine("Newtonsoft.Json.dll序列化{0}项\t共耗时:{1}毫秒", count2, timer.ElapsedMilliseconds);
Console.ReadKey();
}
private static string Serialize1(ApiResult obj)
{
string jsonContent = string.Empty;
DataContractJsonSerializer serialize = new DataContractJsonSerializer(typeof(ApiResult));
using (MemoryStream ms = new MemoryStream())
{
serialize.WriteObject(ms, obj);
jsonContent = Encoding.UTF8.GetString(ms.ToArray());
}
return jsonContent;
}
private static string Serialize2(ApiResult obj)
{
string jsonContent = string.Empty;
jsonContent = JsonConvert.SerializeObject(obj);
return jsonContent;
}
}
public class ApiResult
{
public int Code { get; set; }
public string ErrorMsg { get; set; }
public bool IsError { get; set; }
public string Time { get; set; }
public string Guid { get; set; }
}
}
测试结果:
共创建1000000项 共耗时:1987毫秒
System.Runtime.Serialization.Json序列化1000000项 共耗时:2843毫秒
Newtonsoft.Json.dll序列化1000000项 共耗时:1747毫秒
测试结果证明,不是序列化的问题。
继续测试:
不使用redis,而是直接使用系统提供的DateTime.Now属性,每秒请求数能增加33%
这个结果证明,不是redis的问题。
Web API的CPU占用100%的更多相关文章
- w3wp.exe(IIS ) CPU 占用 100% 的常见原因及解决办法
对于IIS 管理员来说,经常会碰到 Web 服务器 CPU 占用 100% 的情况,以下是个人的日常工作总结和一些解决办法,主要用来剖析 w3wp.exe(IIS ) 占用 CPU 100% 的一些 ...
- w3wp.exe(IIS ) CPU 占用 100% 的常见原因
引起 w3wp.exe(IIS ) Cpu 占用 100% 的常见原因如下: 1. Web 访问量大,从而服务器压力大而引起的 2. 动态页面(.aspx)的程序逻辑复杂程度 3. 页面程序中有死循环 ...
- 服务器php-cgi.exe进程过多,导致CPU占用100%的解决方法
再使用iis服务器中经常会出现php-cgi.exe进程过多,导致CPU占用100%,最终造成网站运行过慢甚至卡死的情况,重启iis会好一会,过一段时间久出现这种情况,为什么会出现这种情况呢,应该怎么 ...
- 解决一个 MySQL 服务器进程 CPU 占用 100%解决一个 MySQL 服务器进程 CPU 占用 100%的技术笔记》[转]
转载地址:http://bbs.chinaunix.net/archiver/tid-1823500.html 解决一个 MySQL 服务器进程 CPU 占用 100%解决一个 MySQL 服务器进程 ...
- paip.navicat form mysql导入文本文件时CPU占用100%的解决
paip.navicat form mysql导入文本文件时CPU占用100%的解决 作者Attilax , EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:h ...
- magento 由于Httpd进程增多,导致CPU占用100%问题
由于Httpd进程增多,导致CPU占用100%问题 magento for version 2.2.3 前些天一直导致CPU无法控制的增多问题. 根据报错我设置了如下内容: [Mysql]mysql. ...
- WIN10刚开机任务管理显示CPU占用100%问题
针对WIN10更新后出现的问题!!! 现象: 电脑刚开机,直接打开任务管理器,CPU占用100%! 但是电脑运行速度正常,按道理这时候应该卡死!(排除病毒) 下载鲁大师查看只是显示CPU 3%!而网上 ...
- VPS/云主机CPU占用100%故障排查
VPS/云主机CPU占用100%故障排查 方法/步骤 通常情况下云主机/VPS的CPU一般不会占用100%,内存资源也不会占完.若您的服务器经常CPU资源100%,可以打开任务管理器,查看是哪个进程引 ...
- mysql cpu 100% 满 优化方案 解决MySQL CPU占用100%的经验总结
下面是一些经验 供参考 解决MySQL CPU占用100%的经验总结 - karl_han的专栏 - CSDN博客 https://blog.csdn.net/karl_han/article/det ...
随机推荐
- POJ_3356——最短编辑距离,动态规划
Description Let x and y be two strings over some finite alphabet A. We would like to transform x int ...
- HBase技术介绍
HBase简介 HBase - Hadoop Database,是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群. HB ...
- Q - Tour - hdu 3488(最小匹配值)
题意:一个王国有N个城市,M条路,都是有向的,现在可以去旅游,不过走的路只能是环(至少也需要有两个城市),他们保证这些城市之间的路径都是有环构成的,现在至少需要走多少路. 分析:因为是有向图所以,而且 ...
- java集合简介
java集合主要包括以下几点 Java 集合概述 Collection 接口 Iterator 接口 Set List Map Collections 工具类 Enumeration 1.java集合 ...
- Git详解之二 Git基础
Git 基础 读完本章你就能上手使用 Git 了.本章将介绍几个最基本的,也是最常用的 Git 命令,以后绝大多数时间里用到的也就是这几个命令.读完本章,你就能初始化一个新的代码仓库,做一些适当配置: ...
- 两个关于XML解析报错问题小记
Caused by: org.xml.sax.SAXParseException: The string "--" is not permitted within comments ...
- Django学习笔记(五)—— 表单
疯狂的暑假学习之 Django学习笔记(五)-- 表单 參考:<The Django Book> 第7章 1. HttpRequest对象的信息 request.path ...
- mysql怎么限制某些查询语句的执行?
mysql怎么限制某些查询语句的执行? 比如某些sql语句执行时间很长,超过10s,怎么样超过10s就不让其执行? 后续更新中...
- 让 IE 支持HTML5 placeholder
HTML5 新增的placeholder属性已经得到现代浏览器的支持,旨在提供简单的API可以为文本输入框设置 描述输入字段预期值的提示信息(hint). 这是W3C在标准化的过程中对用户体验的更多考 ...
- java虚拟机涉及内存溢出
Java语言写的代码是.java文件,它会被特定程序编译(javac.exe,它会被Eclipse之类的IDE调用)成字节码(bytecode),字节码不能直接在CPU上运行,需要另一个程序读取并执行 ...