云服务器内容精选

  • CPU占用率高问题定位 远程登录云服务器。 执行以下命令查看当前系统的运行状态。 top 系统回显样例如图1所示。 图1 回显信息 查看显示结果。 命令回显第一行:20:56:02 up 37 days,1 user, load average: 0.00, 0.01, 0.05的每个字段含义如下: 系统当前时间为20:56:02,该云服务器已运行37天,当前共有1个用户登录, 最近1分钟、最近5分钟和最近15分钟的CPU平均负载。 命令回显第三行:CPU资源总体使用情况。 命令回显第四行:内存资源总体使用情况。 回显最下方显示各进程的资源占用情况。 在top页面,可以直接输入小写“q”或者在键盘上按“Ctrl+C”退出。 除了直接输入命令,您还可以单击VNC登录页面屏幕右上角的“Input Command”,在弹出的对话框中粘贴或者输入相应命令,单击“Send”。 在top运行中常用的内容命令如下: s:改变画面更新频率。 l:关闭或开启第一部分第一行top信息的表示。 t:关闭或开启第一部分第二行Tasks和第三行Cpus信息的表示。 m:关闭或开启第一部分第四行Mem和 第五行Swap信息的表示。 N:以PID的大小的顺序排列进程列表。 P:以CPU占用率大小的顺序排列进程列表。 M:以内存占用率大小的顺序排列进程列表。 h:显示命令帮助。 n:设置在进程列表所显示进程的数量。 通过ll /proc/PID/exe命令可以查看每个进程ID对应的程序文件。
  • CPU使用率高问题处理 对于导致CPU使用率高的具体进程,如果确认是异常进程,可以直接通过top命令终止进程。对于kswapd0进程导致的CPU使用率高的问题,则需要对应用程序进行优化,或者通过增加内存进行系统规格的升级。 kswapd0是系统的虚拟内存管理程序,如果物理内存不够用,系统就会唤醒kswapd0进程,由kswapd0分配磁盘交换空间用作缓存,因而占用大量的CPU资源。 使用top命令终止CPU占用率高的进程 您可以直接在top运行界面快速终止相应的异常进程。操作步骤如下: 在top命令运行的同时,按下小写的“k”键。 输入要终止进程的PID。 进程的PID为top命令回显的第一列数值。例如,要终止PID为52的进程,直接输入“52”后回车。 操作成功后,会出现如图2所示信息,按回车确认。 图2 操作成功示例 kswapd0进程占用导致CPU使用率高 可通过以下步骤排查进程的内存占用情况。 通过top命令查看kswapd0进程的资源使用。 如果kswapd0进程持续处于非睡眠状态,且运行时间较长,可以初步判定系统在持续的进行换页操作,可以将问题转向内存不足的原因来排查。 通过vmstat命令进一步查看系统虚拟内存的使用情况。 如果si和so的值也比较高,说明系统存在频繁的换页操作,系统物理内存不足。 si:每秒从交换区写到内存的大小,由磁盘调入内存。 so:每秒写入交换区的内存大小,由内存调入磁盘。 对于内存不足问题,可以通过free、ps等命令进一步查询系统及系统内进程的内存占用情况,做进一步排查分析。 临时可通过在业务空闲期重启应用或者系统释放内存。 如果要从根本上解决内存不足的问题,需要对服务器内存进行扩容,扩大内存空间。如果不具备扩容的条件,可通过优化应用程序,以及配置使用大页内存来进行缓解。
  • 带宽使用率高问题分析 如果是正常业务访问以及正常应用进程导致的带宽使用率高,需要升级服务器的带宽进行解决。如果是非正常访问,如某些特定IP的恶意访问,或者服务器遭受到了CC攻击。或者异常进程导致的带宽使用率高。可以通过流量监控工具nethogs来实时监测统计各进程的带宽使用情况,并进行问题进程的定位。 使用nethogs工具进行排查 执行以下命令,安装nethogs工具。 yum install nethogs -y 安装成功后可以通过netgos命令查看网络带宽的使用情况。 nethogs命令常用参数说明如下: -d:设置刷新的时间间隔,默认为1s。 -t:开启跟踪模式。 -c:设置更新次数。 device:设置要监测的网卡,默认是eth0。 运行时可以输入以下参数完成相应的操作: q:退出nethogs工具。 s:按发送流量大小的顺序排列进程列表。 r:按接收流量大小的顺序排列进程列表。 m:切换显示计量单位,切换顺序依次为KB/s、KB、B、MB。 执行以下命令,查看指定的网络端口每个进程的网络带宽使用情况。 nethogs eth1 回显参数说明如下: PID:进程ID。 USER:运行该进程的用户。 PROGRAM:进程或连接双方的IP地址和端口,前面是服务器的IP和端口,后面是客户端的IP和端口。 DEV:流量要去往的网络端口。 SENT:进程每秒发送的数据量。 RECEIVED:进程每秒接收的数据量。 终止恶意程序或者屏蔽恶意访问IP。 如果确认大量占用网络带宽的进程是恶意进程,可以使用kill PID命令终止恶意进程。 如果是某个IP恶意访问,可以使用iptables服务来对指定IP地址进行处理,如屏蔽IP地址或限速。 使用Web应用防火墙防御CC攻击 若服务遭受了CC攻击,请在Web应用防火墙控制台开启CC安全防护。Web应用防火墙的使用指导请参见配置CC防护策略。
  • 配置集群参数 查询TopSQL资源监控信息之前,需要先配置相关的GUC参数,以便能查询到作业的资源监控历史信息或归档信息。步骤如下: 登录GaussDB(DWS)管理控制台。 在“集群管理”页面,找到所需要的集群,单击集群名称,进入集群详情页面。 单击“参数修改”标签页,可以看到当前集群的参数值。 修改参数resource_track_duration值为合适的值,单击“保存”按钮进行保存。 enable_resource_record开关打开后,会引起存储空间膨胀及轻微性能影响,不用时请关闭。 返回集群管理页面,单击右上角的刷新按钮,等待集群参数配置完成。
  • 请求参数 表2 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 是 String 用户Token。Token认证就是在调用API的时候将Token加到请求消息头,从而通过身份认证,获得操作API的权限,获取Token接口响应消息头中X-Subject-Token的值即为Token。 表3 请求Body参数 参数 是否必选 参数类型 描述 from_time 否 Long 查询监控数据起始时间,UNIX时间戳,单位毫秒,不填时默认为当前时间 to_time 否 Long 查询数据截止时间,UNIX时间戳,单位毫秒,不填时默认为当前时间 period 否 String 监控数据周期。枚举值,取值范围:real_time(实时数据)、five_minutes(5分钟粒度)、fifteen_to_twenty_minutes(15-20分钟粒度)、one_hour(1小时粒度),不填时默认为real_time 枚举值: real_time five_minutes fifteen_to_twenty_minutes one_hour method 否 String 统计方法。枚举值,取值范围:max(最大值)、min(最小值)、average(平均值),不填时默认为max 枚举值: max min average resource_ids 是 Array of strings 查询的监控资源对象id集合 最小长度:1 最大长度:128 数组长度:1 - 50
  • 响应参数 状态码: 200 表4 响应Body参数 参数 参数类型 描述 metric_statistics Array of ResourceStatDataRsp objects 资源统计数据列表 表5 ResourceStatDataRsp 参数 参数类型 描述 statistic String 统计值 unit String 数据单位 metric_name String 监控指标名称 resource_id String 监控资源id device_id String 显卡id
  • 响应示例 状态码: 200 OK { "metric_statistics" : [ { "statistic" : "12345", "unit" : "bytes/second", "metric_name" : "read_bandwidth", "resource_id" : "123456789", "device_id" : "123456789" } ] }
  • 请求示例 批量下载监控数据,设置起止时间,实时数据,统计方式为max, 指定资源id列表 https://eihealth.cn-north-4.myhuaweicloud.com/v1/{project_id}/metric-data/batch-stat-metric-data { "from_time" : 1234567891011, "to_time" : 1234567891012, "period" : "real_time", "method" : "max", "resource_ids" : [ 123456789 ] }
  • 响应参数 状态码: 200 表4 响应Body参数 参数 参数类型 描述 data_points Array of DataPointDto objects 监控数据列表 metric_name String 监控指标名称 resource_id String 监控资源id 表5 DataPointDto 参数 参数类型 描述 timestamp Long 时间戳 unit String 数据单位 value Number 统计结果
  • URI GET /v1/{project_id}/metric-data 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 华为云项目ID,您可以从获取项目ID中获取。 最小长度:1 最大长度:128 表2 Query参数 参数 是否必选 参数类型 描述 from_time 否 Long 查询监控数据起始时间,UNIX时间戳,单位毫秒,不填时默认为当前时间 to_time 否 Long 查询数据截止时间,UNIX时间戳,单位毫秒,不填时默认为当前时间 period 否 String 监控数据周期。枚举值,取值范围:real_time(实时数据)、five_minutes(5分钟粒度)、fifteen_to_twenty_minutes(15-20分钟粒度)、one_hour(1小时粒度),不填时默认为real_time 缺省值:real_time method 否 String 统计方法。枚举值,取值范围:max(最大值)、min(最小值)、average(平均值),不填时默认为max 缺省值:max metric_name 是 String 查询的监控指标名称 resource_id 否 String 查询的监控资源对象id,当查询存储资源和计算节点资源中的集群监控数据时,不需要填写资源id 最小长度:1 最大长度:128 device_id 否 String 显卡id,仅查询裸金属节点的gpu监控时,需要指定 最小长度:1 最大长度:128
  • 内存监控 GaussDB(DWS)提供了监控整个集群内存使用状态的视图: 查询pgxc_total_memory_detail视图,必须具有sysadmin权限。 1 SELECT * FROM pgxc_total_memory_detail; 如果查询该视图时出现以下错误,请开启内存管理功能。 1 2 3 SELECT * FROM pgxc_total_memory_detail; ERROR: unsupported view for memory protection feature is disabled. CONTEXT: PL/pgSQL function pgxc_total_memory_detail() line 12 at FOR over EXECUTE statement 用户可通过GaussDB(DWS) 控制台设置enable_memory_limit和max_process_memory参数来开启内存管理功能,方法如下: 登录GaussDB(DWS) 管理控制台。 在左侧导航栏中,单击“集群管理”。 在集群列表中找到所需要的集群,单击集群名称,进入集群“基本信息”页面。 单击“参数修改”页签,修改参数“enable_memory_limit”的值为on,然后单击“保存”。 修改参数“max_process_memory”的值为合适的值,修改建议请参见max_process_memory,然后单击“保存”。 在“修改预览”窗口,确认修改无误后,单击“保存”。修改完成后需要重启集群,参数才会生效。
  • 注意事项 用户监控可以同时监控快慢车道(快车道管控简单作业,慢车道管控复杂作业)所有作业的CPU、IO和内存使用情况,不再受限于仅监控慢车道作业。 当前快车道作业内存和CPU不受控,在快车道运行作业占用资源较多情况下,可能出现已用资源大于资源限制的情况。 DN监控视图中,IO、内存和CPU显示的是本DN上资源池资源使用和资源限制信息。 CN监控视图中,IO、内存和CPU显示的是集群内所有DN资源池资源使用和资源限制的累积和。 DN每隔5s更新一次监控信息,CN每隔5s从DN收集一次用户监控信息,因为各实例单独更新/收集用户监控信息,因此各实例监控信息更新时间可能不一致。 辅助线程中每隔30s自动调用持久化函数,持久化用户监控数据,正常情况下不需要用户单独调用持久化函数持久化用户监控数据。 当用户数量较多,集群规模较大时,查询此类实时视图,因CN/DN间实时通信开销,会有一定的网络延时。 初始管理用户不进行资源监控。
  • 操作步骤 查询所有用户的资源限额和资源实时使用情况。 1 SELECT * FROM PG_TOTAL_USER_RESOURCE_INFO; 得到的结果视图如下: username | used_memory | total_memory | used_cpu | total_cpu | used_space | total_space | used_temp_space | total_temp_space | used_spill_space | total_spill_space | read_kbytes | write_kbytes | read_counts | write_counts | read_speed | write_speed | send_speed | recv_speed -----------------------+-------------+--------------+----------+-----------+------------+-------------+-----------------+------------------+------------------+-------------------+-------------+--------------+-------------+--------------+------------+-------------+------------+------------ perfadm | 0 | 0 | 0 | 0 | 0 | -1 | 0 | -1 | 0 | -1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 usern | 0 | 17250 | 0 | 48 | 0 | -1 | 0 | -1 | 0 | -1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 (2 rows) 其中,IO资源监控字段(read_kbytes、write_kbytes、read_counts、write_counts、read_speed和write_speed)需要在GUC参数enable_user_metric_persistent开启时才有监控数据。 所查各字段说明详见PG_TOTAL_USER_RESOURCE_INFO 。 查询具体某个用户的资源限额和资源实时使用情况。 1 SELECT * FROM GS_WLM_USER_RESOURCE_INFO('username'); 查询结果如下: userid | used_memory | total_memory | used_cpu | total_cpu | used_space | total_space | used_temp_space | total_temp_space | used_spill_space | total_spill_space | read_kbytes | write_kbytes | read_counts | write_counts | read_speed | write_speed | send_speed | recv_speed --------+-------------+--------------+----------+-----------+------------+-------------+-----------------+------------------+------------------+-------------------+-------------+--------------+-------------+--------------+------------+-------------+------------+------------ 16407 | 18 | 1655 | 6 | 19 | 13787176 | -1 | 0 | -1 | 0 | -1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 (1 row) 查询所有用户的资源限额和资源历史使用情况。 1 SELECT * FROM GS_WLM_USER_RESOURCE_HISTORY; 查询结果如下: username | timestamp | used_memory | total_memory | used_cpu | total_cpu | used_space | total_space | used_temp_space | total_temp_space | used_spill_space | total_spill_space | read_kbytes | write_kbytes | read_counts | write_counts | read_speed | write_speed | send_speed | recv_speed -----------------------+-------------------------------+-------------+--------------+----------+-----------+------------+-------------+-----------------+------------------+------------------+-------------------+-------------+--------------+-------------+--------------+-------------+-------------+------------+------------ usern | 2020-01-08 22:56:06.456855+08 | 0 | 17250 | 0 | 48 | 0 | -1 | 0 | -1 | 88349078 | -1 | 45680 | 34 | 5710 | 8 | 320 | 0 | 0 | 0 userg | 2020-01-08 22:56:06.458659+08 | 0 | 15525 | 33.48 | 48 | 0 | -1 | 0 | -1 | 110169581 | -1 | 17648 | 23 | 2206 | 5 | 123 | 0 | 0 | 0 userg1 | 2020-01-08 22:56:06.460252+08 | 0 | 13972 | 33.48 | 48 | 0 | -1 | 0 | -1 | 136106277 | -1 | 17648 | 23 | 2206 | 5 | 123 | 0 | 0 | 0 对于系统表GS_WLM_USER_RESOURCE_HISTORY,仅当GUC参数enable_user_metric_persistent开启时,才会定期将视图PG_TOTAL_USER_RESOURCE_INFO中的数据保存到历史表中。 所查各字段说明详见GS_WLM_USER_RESOURCE_HISTORY。
  • 简介 多租户管理框架下,用户关联资源池执行查询,用户执行查询所占用的资源将汇总至关联资源池上,通过资源池监控视图,用户可以直观的查询到所有资源池的实时资源使用情况,同时也可以通过资源池监控历史表查询资源池资源的历史使用情况。 资源池监控数据每5s更新一次,但是因为CN和DN时间差,实际监控数据更新时间可能会大于5s,正常不会超过10s。资源池监控数据每30s持久化一次,资源池监控和用户监控逻辑基本一致,因此共用GUC参数控制持久化和老化,使用GUC参数enable_user_metric_persistent控制是否进行资源池监控数据持久化,使用GUC参数user_metric_retention_time控制资源池监控数据老化。 资源池监控的资源包含:快慢车道作业运行和排队信息,CPU、内存以及逻辑IO资源监控信息。涉及的监控视图和历史表如下: 资源池实时运行信息监控视图(单CN):GS_RESPOOL_RUNTIME_INFO。 资源池实时运行信息监控视图(所有CN):PGXC_RESPOOL_RUNTIME_INFO。 资源池实时资源监控视图(单CN):GS_RESPOOL_RESOURCE_INFO。 资源池实时资源监控视图(所有CN):PGXC_RESPOOL_RESOURCE_INFO。 资源池历史资源监控表(单CN):GS_RESPOOL_RESOURCE_HISTORY。 资源池历史资源监控视图(所有CN):PGXC_RESPOOL_RESOURCE_HISTORY。 资源池监控可以同时监控快慢车道所有作业的CPU、IO和内存使用情况,不再受限于仅监控慢车道作业。 当前快车道作业内存和CPU不受控,在快车道运行作业占用资源较多情况下,可能出现已用资源大于资源限制的情况。 DN资源池监控视图中,IO、内存和CPU显示的是本DN上资源池资源使用和资源限制信息。 CN资源池监控视图中,IO、内存和CPU显示的是集群内所有DN资源池资源使用和资源限制的累积和。 DN每隔5s更新一次资源池监控信息,CN每隔5s从DN收集一次资源池监控信息,因为各实例单独更新/收集资源池监控信息,因此各实例监控信息更新时间可能不一致。 辅助线程中每隔30s自动调用持久化函数,持久化资源池监控数据,正常情况下不需要用户单独调用持久化函数持久化资源池监控数据。
  • 操作步骤 查询资源池的作业实时运行情况。 1 SELECT * FROM GS_RESPOOL_RUNTIME_INFO; 得到的结果视图如下: nodegroup | rpname | ref_count | fast_run | fast_wait | slow_run | slow_wait -----------+--------------+-----------+----------+-----------+----------+----------- vc1 | p2 | 10 | 0 | 0 | 0 | 0 vc2 | p3 | 10 | 5 | 5 | 0 | 0 vc2 | p4 | 0 | 0 | 0 | 0 | 0 vc1 | default_pool | 0 | 0 | 0 | 0 | 0 vc2 | default_pool | 0 | 0 | 0 | 0 | 0 vc1 | p1 | 20 | 5 | 5 | 3 | 7 (6 rows) 其中: ref_count为引用当前资源池信息的作业数,语句从进入管控到结束一直占用该计数; fast_run和slow_run为负载管理记账信息,只有管控(fast_limit/slow_limit大于0)时该值才有效; 该视图仅在CN上有效,持久化信息保存在GS_RESPOOL_RESOURCE_HISTORY中; 各字段说明详见GS_RESPOOL_RUNTIME_INFO。 查询资源池的资源限额和资源实时使用情况。 1 SELECT * FROM GS_RESPOOL_RESOURCE_INFO; 得到的结果视图如下: nodegroup | rpname | cgroup | ref_count | fast_run | fast_wait | fast_limit | slow_run | slow_wait | slow_limit | used_cpu | cpu_limit | used_mem | estimate_mem | mem_limit |read_kbytes | write_kbytes | read_counts | write_counts | read_speed | write_speed | send_speed | recv_speed -----------+--------------+---------------------+-----------+----------+-----------+------------+----------+-----------+------------+----------+-----------+----------+--------------+-----------+-------------+--------------+-------------+--------------+------------+-------------+------------+------------ vc1 | p2 | DefaultClass:Rush | 10 | 0 | 0 | -1 | 0 | 0 | 10 | 9.97 | 48 | 20 | 0 | 11555 | 8 | 2880 | 1 | 360 | 1 | 589 | 0 | 0 vc2 | p3 | DefaultClass:Rush | 10 | 5 | 5 | 5 | 0 | 0 | 10 | 4.98 | 48 | 11 | 0 | 11555 | 0 | 848 | 0 | 106 | 0 | 173 | 0 | 0 vc2 | p4 | DefaultClass:Rush | 0 | 0 | 0 | -1 | 0 | 0 | 10 | 0 | 48 | 0 | 0 | 11555 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 vc1 | default_pool | DefaultClass:Medium | 0 | 0 | 0 | -1 | 0 | 0 | -1 | 0 | 48 | 0 | 0 | 11555 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 vc2 | default_pool | DefaultClass:Medium | 0 | 0 | 0 | -1 | 0 | 0 | -1 | 0 | 48 | 0 | 0 | 11555 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 vc1 | p1 | DefaultClass:Rush | 20 | 5 | 5 | 5 | 3 | 7 | 3 | 7.98 | 48 | 16 | 768 | 11555 | 8 | 2656 | 1 | 332 | 1 | 543 | 0 | 0 (6 rows) 该视图在CN和DN上均有效,DN上CPU、内存和IO为本DN资源消耗情况,CN上CPU、内存和IO为集群内所有DN上资源消耗的累加和; estimate_mem仅在动态负载管理情况下CN上有效,显示资源池估算内存记账情况; IO监控信息仅在enable_logical_io_statistics开启时才会记录; 各字段说明详见GS_RESPOOL_RESOURCE_INFO。 查询资源池的资源限额和资源历史使用情况。 1 SELECT * FROM GS_RESPOOL_RESOURCE_HISTORY ORDER BY timestamp DESC; 得到的结果视图如下: timestamp | nodegroup | rpname | cgroup | ref_count | fast_run | fast_wait | fast_limit | slow_run | slow_wait | slow_limit | used_cpu | cpu_limit | used_mem | estimate_mem | mem_limit | read_kbytes | write_kbytes | read_counts | write_counts | read_speed | write_speed | send_speed | recv_speed -------------------------------+--------------+--------------+---------------------+-----------+----------+-----------+------------+----------+-----------+------------+----------+-----------+----------+--------------+-----------+-------------+--------------+-------------+--------------+------------+-------------+------------+------------ 2022-03-04 09:41:57.53739+08 | vc1 | p2 | DefaultClass:Rush | 10 | 0 | 0 | -1 | 0 | 0 | 10 | 9.97 | 48 | 20 | 0 | 11555 | 0 | 2320 | 0 | 290 | 0 | 474 | 0 | 0 2022-03-04 09:41:57.53739+08 | vc1 | p1 | DefaultClass:Rush | 20 | 5 | 5 | 5 | 3 | 7 | 3 | 7.98 | 48 | 16 | 768 | 11555 | 0 | 1896 | 0 | 237 | 0 | 387 | 0 | 0 2022-03-04 09:41:57.53739+08 | vc2 | default_pool | DefaultClass:Medium | 0 | 0 | 0 | -1 | 0 | 0 | -1 | 0 | 48 | 0 | 0 | 11555 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 2022-03-04 09:41:57.53739+08 | vc1 | default_pool | DefaultClass:Medium | 0 | 0 | 0 | -1 | 0 | 0 | -1 | 0 | 48 | 0 | 0 | 11555 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 2022-03-04 09:41:57.53739+08 | vc2 | p4 | DefaultClass:Rush | 0 | 0 | 0 | -1 | 0 | 0 | 10 | 0 | 48 | 0 | 0 | 11555 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 2022-03-04 09:41:57.53739+08 | vc2 | p3 | DefaultClass:Rush | 10 | 5 | 5 | 5 | 0 | 0 | 10 | 4.99 | 48 | 11 | 0 | 11555 | 0 | 880 | 0 | 110 | 0 | 180 | 0 | 0 2022-03-04 09:41:27.335234+08 | vc2 | p3 | DefaultClass:Rush | 10 | 5 | 5 | 5 | 0 | 0 | 10 | 4.98 | 48 | 11 | 0 | 11555 | 0 | 856 | 0 | 107 | 0 | 175 | 0 | 0 该监控信息来自资源池监控历史表,enable_user_metric_persistent开启时每30秒记录一次; 该表数据保存时间由GUC参数user_metric_retention_time控制; 各字段说明详见GS_RESPOOL_RESOURCE_HISTORY。