【解决问题】解决w3wp.exe mysqld.exe进程cpu100%办法

更新时间:2019-06-05    来源:php基础    手机版     字体:

【www.bbyears.com--php基础】

说点关于W3WP.EXE的知识.

Q : W3WP.EXE,应用程序,应用程序池之间的关系
A : 一个应用程序池可以包含多个应用程序,一个应用程序池创建一个W3WP.EXE进程.那么我们就不能简单的说一个进程池对应一个W3WP.EXE进程了!其实是多个应用进程池对应一个W3WP.EXE进程的.

适合版本

DiscuzX全线产品(1.0/1.5/2.0/2.5/3.0/3.1)

程序方面检查

1、近期是否安装了一些插件或添加了程序,检查代码是否有不合理语法,死循环等。例如关闭不需要的插件;首页N类似功能建议使用diy或模板,不建议使用插件
2、关闭云平台中不用的项目,例如:纵横搜索等
3、云平台手动设置接口ip,优化选择速度
4、后台配置启用相关优化、缓存等。如果可以,建议启用memcache内存优化
5、关闭非正规联盟的广告
6、如果有必要可以启用CC攻击:

引用
$_config["security"]["attackevasive"]  = 0;(0表示关闭此功能)
  0表示关闭此功能
  1表示cookie刷新限制
  2表示限制代理访问
  4表示二次请求
  8表示回答问题(第一次访问时需要回答问题)
  同时也可以设置为组合的方式,如1|2表示同时启用cookie刷新限制和限制代理访问。

解决seo/seo.html" target="_blank">搜索引擎索引问题,在主目录下打开/source/include/misc/misc_security.php

文件找到

 代码如下 if($attackevasive & 4) {
      if(empty($lastrequest) || TIMESTAMP - $lastrequest > 300) {
          securitymessage("attackevasive_4_subject", "attackevasive_4_message");
      }
  }
  修改为:
  if($attackevasive & 4) {
      if(empty($lastrequest) || TIMESTAMP - $lastrequest > 300) {
      $kw_spiders        = "Bot|Crawl|Spider";
              // keywords regular expression of search engine spiders
      if(preg_match("/($kw_spiders)/i", $_SERVER["HTTP_USER_AGENT"])) {
              // match search engine spiders
      }else{
          securitymessage("attackevasive_4_subject", "attackevasive_4_message");
      }
  }

7、对数据量较大的表根据sql查询情况,对相应的字段建立索引(有效防范mysqld.exe进程100%或不稳定现象)
例如:ALTER TABLE `pre_threads` ADD INDEX ( `dateline` );

 

解决CPU占用过多:

1、在IIS中对每个网站进行单独的应用程序池配置。即互相之间不影响。
2、设置应用程序池的CPU监视,不超过25%(服务器为4CPU),每分钟刷新,超过限制时关闭。
根据w3wp取得是那个一个应用程序池:
1、在任务管理器中增加显示pid字段。就可以看到占用内存或者cpu最高的进程pid
2、在命令提示符下运行iisapp -a。注意,第一次运行,会提示没有js支持,点击确定。然后再次运行就可以了。这样就可以看到pid对应的应用程序池。(iisapp实际上是存放在 C:\windows\system32目录下的一个VBS脚本,全名为iisapp.vbs,如果禁止了Vbs默认关联程序,那么就需要手动到该目录,先择打开方式,然后选“Microsoft (r) Windows Based Script Host”来执行,就可以得到PID与应用程序池的对应关系。)
3、到iis中察看该应用程序池对应的网站,就ok了,做出上面的内存或CPU方面的限制,或检查程序有无死循环之类的问题。
A2 : by 小步舞曲
查看占用cpu的w3wp进程里面里面有那个用户呼叫的token

Q : 另一种加载了某程序后发生w3wp.exe问题
A: 修改C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\CONFIG\machine.config,再配置节点中有一个属性"memoryLimit",这个属性的值是一个百分比,默认为"60"(注意,是60%不是 60M),即制定了ASP.NET进程能够使用所有物理内存的60%,当ASP.NET使用的内存量草果这个限额时,IIS会开始自动回收进程,即创建一个新的进程去负责应付HTTP请求,而将旧进程所占用的内存回收.

服务器方面检查

1、近期是否在服务器上安装一些插件或软件,建议卸载服务器上不常用的软件及插件
2、所有安装的插件建议从其官方网站进行下载
3、优化配置安装php,mysql等组件
4、结合服务器相关日志数据分析慢程序、慢sql 及结合mysql show processlist命令查看当前有哪些线程在运行等。
5、如果可以,建议配置memcache优化
6、结合服务器相关日志数据分析服务器是否存在攻击、防盗链、采集等
7、对w3wp对应的应用程序池进行相关限制配置(当然执行这个的前提是你服务器上的每个网站需要配置对应单独应用程序池),可以通过iisapp -a查看w3wp进程pid对应的应用程序池
8、扫描服务器全盘文件是否存在木马病毒
9、删除当日IIS日志并重启IIS服务(当IIS被异常中断时,IIS会写异常日志,但是此时写入了乱码,造成IIS一直写日志的死循环,耗尽了系统资源。)
10、建议更换为linux系统

mysql的sql语分析 Explain

一.语法

explain < table_name >

例如: explain select * from t3 where id=3952602;

使用方法,在select语句前加上explain就可以了:

 代码如下 mysql> explain select count(id) from t_prehandle_zhigao_05 as zhigao where start_time > "2008-05-30";
+----+-------------+--------+-------+---------------+------------+---------+------+---------+--------------------------+
| id | select_type | table  | type  | possible_keys | key   www.111cn.net     | key_len | ref  | rows    | Extra                    |
+----+-------------+--------+-------+---------------+------------+---------+------+---------+--------------------------+
|  1 | SIMPLE      | zhigao | range | start_time    | start_time | 8       | NULL | 1061762 | Using where; Using index |
+----+-------------+--------+-------+---------------+------------+---------+------+---------+--------------------------+

XPLAIN列的解释: www.111cn.net
table 显示这一行的数据是关于哪张表的
type  这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL
type: 表示表的连接类型,性能由好到差的类型类型为
 (System(表中仅有一行,即常量表),
 const(单表中最多有一个匹配行),
 eq_ref(对于前面的每一行,在此表中只查询一条记录),
 ref(使用普通的索引),
 ref_or_null(和ref类似,但是条件中包含对于NULL查询),
 index_merge(索引合并优化),
 unique_subquery(in的后面是一个查询主键字段的子查询),
 index_subquery(类似unique_subquery,主要是in的后面是查询非唯一索引字段的子查询),
 range(单表中的范围查询),
 index(对于当前的每一行,都通过查询索引来得到数据),
 all(对于当前的每一行,都通过全表扫描来得到数据))

possible_keys 显示可能应用在这张表中的索引。如果为空,没有可能的索引。可以为相关的域从WHERE语句中选择一个合适的语句
key 实际使用的索引。如果为NULL,则没有使用索引。很少的情况下,MYSQL会选择优化不足的索引。这种情况下,可以在SELECT语句中使用USE INDEX(indexname)来强制使用一个索引或者用IGNORE INDEX(indexname)来强制MYSQL忽略索引
key_len 使用的索引的长度。在不损失精确性的情况下,长度越短越好
ref 显示索引的哪一列被使用了,如果可能的话,是一个常数
rows MYSQL认为必须检查的用来返回请求数据的行数
Extra 关于MYSQL如何解析查询的额外信息。将在表4.3中讨论,但这里可以看到的坏的例子是Using temporary和Using filesort,意思MYSQL根本不能使用索引,结果是检索会很慢

本文来源:http://www.bbyears.com/jiaocheng/53324.html

猜你感兴趣

热门标签

更多>>

本类排行