当前位置: 首页 > news >正文

有了域名和主机怎么做网站怎样搭建一个网站

有了域名和主机怎么做网站,怎样搭建一个网站,吴忠北京网站建设,嘉兴网站关键词优化目录 1. 引言2. 开启sysguard模块2.1 编译2.2 配置3. 源码分析3.1 配置参数分析3.2 模块的初始化3.3 ngx_http_sysguard_handler函数3.4 各项负载指标的获取3.4.1 load系统负载的获取3.4.2 cpu使用率的获取3.4.3 内存使用情况的获取3.3.5 请求平均响应时间的获取1. 引言 Tengin…

目录

  • 1. 引言
  • 2. 开启sysguard模块
    • 2.1 编译
  • 2.2 配置
  • 3. 源码分析
    • 3.1 配置参数分析
    • 3.2 模块的初始化
    • 3.3 ngx_http_sysguard_handler函数
  • 3.4 各项负载指标的获取
      • 3.4.1 load系统负载的获取
      • 3.4.2 cpu使用率的获取
      • 3.4.3 内存使用情况的获取
      • 3.3.5 请求平均响应时间的获取

1. 引言

  Tengine 是一款高性能的 Web 服务器,其 Sysguard 模块作为其核心功能之一,为用户提供了强大的系统监控和管理能力。通过 Sysguard 模块,用户可以实时监测服务器的运行状态、性能指标和资源利用情况,对异常压力实施熔断处理,从而有效优化系统运行和提升稳定性。本文将深入探讨 Tengine 的 Sysguard 模块,介绍其功能特点、部署配置,以及通过源码分析来深入理解其实现原理。

2. 开启sysguard模块

2.1 编译

  需要开启sysguard模块,因为tengine默认是不加载这个模块的,因此在编译的时候要将这个模块编译进去,如下:


./configure --add-module=modules/ngx_http_sysguard_module

2.2 配置

  直接拿官网文档的例子来举例:


server {sysguard on;                   # 开启sysguard模块sysguard_mode or;              # 多个负载条件匹配模式采用or还是and方式# 格式:负载类型   负载阈值     超过规定阈值后执行的跳转动作目标路径# 其中部分指令中定义的period表示性能指标采样的周期sysguard_load load=10.5 action=/loadlimit;sysguard_cpu usage=20 period=3s action=/cpulimit;sysguard_mem swapratio=20% action=/swaplimit;sysguard_mem free=100M action=/freelimit;sysguard_rt rt=0.01 period=5s action=/rtlimit;# 以下几个location定义的是熔断以后,nginx将请求跳转到这里来执行响应处理location /loadlimit {return 503;}location /swaplimit {return 503;}location /freelimit {return 503;}location /rtlimit {return 503;}location /cpulimit {return 503;}
}

  针对上面的范例总结一下,我们可以定义一个或者若干个负载条件(包括load、cpu使用率、内存使用率)采用“与”或者“或”的方式进行组合,当nginx的负载超过了设定的条件的时候,就会执行对应的跳转动作。

  具体的各个配置指令大家可以参考sysguard 模块官方文档。

3. 源码分析

3.1 配置参数分析

  首先看一下配置加载的c语言的目标结构体。

typedef struct {ngx_flag_t                    enable;                 // 是否启用本模块ngx_int_t                     load;                   // load阈值ngx_str_t                     load_action;            // locad超阈值的跳转地址ngx_int_t                     cpuusage;               // cpu使用率阈值ngx_str_t                     cpuusage_action;        // cpu使用率超阈值的跳转地址ngx_int_t                     swap;                   // swap阈值ngx_str_t                     swap_action;            // swap超阈值的跳转地址size_t                        free;                   // free内存阈值ngx_str_t                     free_action;            // free内存超阈值的跳转地址ngx_int_t                     rt;                     // 平均响应时间的阈值ngx_int_t                     rt_period;              // 平均响应时间的更新周期ngx_str_t                     rt_action;              // 超平均响应时间阈值的跳转地址time_t                        interval;               // 获取系统信息时的缓存时间time_t                        cpu_interval;           // CPU负载采样更新周期ngx_uint_t                    log_level;              // 超阈值事件的日志等级ngx_uint_t                    mode;                   // or还是and模式ngx_http_sysguard_rt_ring_t  *rt_ring;
} ngx_http_sysguard_conf_t;

  配置加载的时候会根据配置的设置填充以上结构体中对应的字段。

3.2 模块的初始化

  模块的初始化是在ngx_http_sysguard_init函数用执行的。而ngx_http_sysguard_init函数是通过下面的声明来注册到nginx的框架中的。

static ngx_http_module_t  ngx_http_sysguard_module_ctx = {NULL,                                   /* preconfiguration */ngx_http_sysguard_init,                 /* postconfiguration */NULL,                                   /* create main configuration */NULL,                                   /* init main configuration */NULL,                                   /* create server configuration */NULL,                                   /* merge server configuration */ngx_http_sysguard_create_conf,          /* create location configuration */ngx_http_sysguard_merge_conf            /* merge location configuration */
};ngx_module_t  ngx_http_sysguard_module = {NGX_MODULE_V1,&ngx_http_sysguard_module_ctx,          /* module context */ngx_http_sysguard_commands,             /* module directives */NGX_HTTP_MODULE,                        /* module type */NULL,                                   /* init master */NULL,                                   /* init module */NULL,                                   /* init process */NULL,                                   /* init thread */NULL,                                   /* exit thread */NULL,                                   /* exit process */NULL,                                   /* exit master */NGX_MODULE_V1_PADDING
};

  分析ngx_http_sysguard_init函数,我们可以知道,它在NGX_HTTP_PREACCESS_PHASE阶段和NGX_HTTP_LOG_PHASE阶段分别注册了ngx_http_sysguard_handler和ngx_http_sysguard_log_handler两个回调函数,函数定义如下:

static ngx_int_t
ngx_http_sysguard_init(ngx_conf_t *cf)
{ngx_http_handler_pt        *h;ngx_http_core_main_conf_t  *cmcf;cmcf = ngx_http_conf_get_module_main_conf(cf, ngx_http_core_module);h = ngx_array_push(&cmcf->phases[NGX_HTTP_PREACCESS_PHASE].handlers);if (h == NULL) {return NGX_ERROR;}*h = ngx_http_sysguard_handler;h = ngx_array_push(&cmcf->phases[NGX_HTTP_LOG_PHASE].handlers);if (h == NULL) {return NGX_ERROR;}*h = ngx_http_sysguard_log_handler;return NGX_OK;
}

3.3 ngx_http_sysguard_handler函数

  该函数在NGX_HTTP_PREACCESS_PHASE阶段被调用。
  首先判断本模块是否已经执行过了并且已经被enable了,如果没有enable,则跳过本模块的后续逻辑。

    if (r->main->sysguard_set) {return NGX_DECLINED;}glcf = ngx_http_get_module_loc_conf(r, ngx_http_sysguard_module);if (!glcf->enable) {return NGX_DECLINED;}

  接着设置sysgaurd_set标记位,表示本模块已经处理过了,后续如果重新进入本函数就不需要重新处理了。

    r->main->sysguard_set = 1;

  为什么会再次进入本函数呢?譬如rewrite操作,或者发生了subrequest请求,都可能导致。

  接下去以load系统负载为例,来看程序的实现逻辑,源码如下:

  /* load */if (glcf->load != NGX_CONF_UNSET) {if (ngx_http_sysguard_cached_load_exptime < ngx_time()) {ngx_http_sysguard_update_load(r, glcf->interval);}ngx_log_debug4(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,"http sysguard handler load: %1.3f %1.3f %V %V",ngx_http_sysguard_cached_load * 1.0 / 1000,glcf->load * 1.0 / 1000,&r->uri,&glcf->load_action
http://www.mmbaike.com/news/106084.html

相关文章:

  • 西安网站建设首选那家网络推广的方法有多选题
  • 网站建设免费书app推广全国代理加盟
  • 网站建站开发上海做网站优化
  • 最常访问的网址seo排名官网
  • 怎样做化妆品公司网站微信广告
  • 要怎么做自己的网站视频教学网站百度手机端排名怎么查询
  • 淘客个人网站怎么建设什么是网络营销渠道
  • wordpress 切换域名兰州seo推广
  • 室内设计师需要考什么证海淀区seo搜索优化
  • 找哪个公司做网站推广最好免费推广网站2023
  • 花瓣官网设计网站搜关键词网站
  • 公众号怎么推广产品站长seo推广
  • 赣州那里有做网站的公司全网搜索引擎优化
  • 江都网站制作网络推广公司简介
  • 橙子建站是什么软件电脑培训网上课程
  • 宁波定制网站建设解决方案长春做网站推荐选吉网传媒好
  • 漳州港建设规划局网站怎么给公司做网站
  • 天津建委招标网站北京seo服务行者
  • 好男人的最好的影院重庆seo网络营销
  • 免费做企业网站网站建设网站定制
  • 做网站开发前景如何适合seo的建站系统
  • 二级域名解析网seo搜索优化费用
  • 罗湖网站建设价格嘉兴网站建设制作
  • 企业网站怎么做产品图片轮播近期出现的病毒叫什么
  • 营销型网站建设与网页设计网络站点推广的方法有哪些
  • com网站怎么注册怎么发布信息到百度
  • 新网站怎么做才会被收录百度快照优化排名推广怎么做
  • 做网站加载速度有什么方法邵阳seo优化
  • 磁力链接 网站怎么做的怎样申请网站注册
  • 外贸平台哪个网站最好知乎国内能用的搜索引擎