上课课件监控分析以及优化_第1页
上课课件监控分析以及优化_第2页
上课课件监控分析以及优化_第3页
上课课件监控分析以及优化_第4页
上课课件监控分析以及优化_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、nginx分析以及优化安大叔2013-03-20目录: nginx介绍 nginx安装 nginx使用 nginx nginx分析调优nginx目录一款轻量级的Web 服务器/反向服务器及电子邮件(IMAP/POP3)服务器,并在一个BSD-like 协议下。由俄罗斯的程序设计师Igor Sysoev所开发,供大型的及搜寻引擎Rambler使用在国内,已经有新浪博客、新浪播客、搜狐通行证、网易、网易博客、金山逍遥网、金山爱词霸、校内网、YUPOO相册、豆瓣、迅雷看看等多家Nginx 服务器。、频道使用nginx简介1、高并发连接:采用内核poll模型,测试能够支撑10万并发连接,在实际生产环境

2、中跑到23万并发连接数。2、内存消耗少:在3万并发连接下,开启的10个Nginx 进程才消耗150M内存(15M*10=150M),所以使得nginx 十分稳定。3、配置文件非常简单:风格跟程序一样通俗易懂。4、成本低廉:Nginx为开源软件,可以使用。而购买F5 BIG-IP、NetScaler等硬件负载均衡交换机则需要十多万至几十万。5、作为web服务器,nginx处理静态文件、索引文件、自动索引的效率非常高6、高可用性:升级、更新对用户可以做到完全不感知Nginx优点单台Nginx支撑了高达2.8万的活动并发连接数Nginx单机并发能力1、使用序Nginx结合FastCGI运行 PHP、

3、JSP 、Perl等程2、使用Nginx作反向、负载均衡、规则过滤3、使用Nginx运行静态HTML页、图片4、Nginx与其他新技术的结合应用Nginx应用类别建立用户及组/usr/sbin/groupadd www/usr/sbin/useradd -g www www2安装pcre 让nginx支持rewrite 方便以后所需wget ftp:/ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-7.8.tar.gztar zxvf pcre-7.8.tar.gzcd pcre-7.8/./configuremake &&am

4、p; make installnginx安装安装nginxwgettar zxvf nginx-0.7.58.tar.gzcd nginx-0.7.58/./configure -user=www -group=www -prefix=/usr/local/webserver/ngin x -with-http_stub_status_module -with-http_ssl_module -with-cc-opt='-O2' -with-cpu-opt=opteronmake && make install注意上文中的-with-cc-opt='-O

5、2' -with-cpu-opt=opteron 这是编译器优化,目前最常用的是-02 而不是3.后面对应CPU的型号,可参照:.gentoo.tw/index.php/HOWTO_CFLAGNginx安装xx_17023 ?14164 ?14165 ?14166 ?14167 ?14168 ?14169 ?14170 ?14171 ?14172 ?# ps axf|fgrep nginx:|fgrep -v fgrepSR S R S R S R RS0:04 nginx: master process /usr/local/nginx/sbin/nginx -c 382:38380

6、:52381:09381:24381:13381:58381:44381:420:02_ nginx: worker process_ nginx: worker process_ nginx: worker process_ nginx: worker process_ nginx: worker process_ nginx: worker process_ nginx: worker process_ nginx: worker process_ nginx: cache manager processNginx运行实况Nginx运行实况master进程worker. 有异常时重新生成响

7、应信号安全重新加载配置Binary更新切割日志Nginx运行实况可配置数量的worker进程-以非用户运行-接收并处理用户请求-接收master信号Cache manager进程管理-Cache-异步处理cache过期Cache loader(?)进程-启动时加载已有cache数据信息Nginx运行实况Master&workerMasterworker大循环单进程单线程,区别于apache、tomcat、resin等其他中间件/web服务器。异步I/O,保证无阻塞驱动缓存机制Nginx工作模式内存池struct ngx_pool_s ngx_pool_data_td;size_tngx

8、_pool_t ngx_chain_tmax;*current;*chain;ngx_pool_large_t*large;ngx_pool_cleanup_t*cleanup;ngx_log_t*log;考虑对齐生命周期零取整还减少内存碎片开发过程中不必花费太多时间关注内存管理的回收Nginx内存管理Time Cache.减少gettimeofday调用次数字符串表达预生成秒未变时的简化触发更新读写竞争 (信号重入, 多线程)信号安全 (sig-safe)Nginx时间管理Nginx支持以下几种信号:TERM,INT 快速关闭QUIT 从容关闭HUP重新加载配置. 使用新配置创建新的work

9、er进程, 安全旧的worker进程USR1 重新打开日志文件,在切割日志时用途较大USR2 平滑升级克执行程序WINCH 从容关闭工作进程Reload 重新加载配置Nginx的信号启动poechantubuntu:sudo ./sbin/nginx指定配置文件启动/sbin/nginx -c /usr/local/nginx/conf/nginx.conf如果更改了配置就要重启Nginx,要先关闭Nginx再打开?不是的,可以向Nginx信号,平滑重启。平滑重启命令:kill -HUP 住进称号或进程或者使用/usr/nginx/sbin/nginx -s reload路径注意,修改了配置文

10、件后最好先检查一下修改过的配置文件是否正确,以免重启后Nginx出现错误影响服务器稳定运行。是否正确命令如下:nginx -t -c /usr/nginx/conf/nginx.conf或者/usr/nginx/sbin/nginx -tNginx配置Nginx启动以及平滑重启如果服务器正在运行的Nginx要进行升级、添加或删除模块时,我们需要停掉服务器并做相应修改,这样服务器就要在一段时间内停止服务,Nginx可以在不停机的情况下进行各种升级动作而不影响服务器运行。步骤1:如 果升级Nginx程序,先用新程序替换旧程序文件,编译安装的话新程序直接编译到Nginx安装目录中。步骤2:执行命令k

11、ill -USR2 旧版程序的主进程号或进程文件名此时旧的Nginx主进程将会把的进程文件改名为.oldbin,然后执行新版Nginx。新旧Nginx会同市运行,共同处理请求。这时要逐步停止旧版Nginx,输入命令: kill -WINCH 旧版主进程号慢慢旧的工作进程就都会随着任务执行完毕而工作进程。此 时,我们可以决定使用新版还是恢复到旧版。不重载配置启动新/旧工作进程,新版的Nginx的工作进程会逐渐取代旧版kill -HUP 旧/新版主进程号从容关闭旧/新进程kill -QUIT 旧/新主进程号如果此错,提示还有进程没有结束就用下面命令先关闭旧/新工作进程,再关闭主进程号:kill -

12、TERM 旧/新工作进程号这样下来,如果要恢复到旧版本,只需要上面的几个步骤都是操作新版主进程号,如果要用新版本就上面的几个步骤都操作旧版主进程号就行了。上面就是Nginx的一些基本的操作,希望以后Nginx能有更好的方法来处理这些操作, 最好是令而不是向Nginx进程系统信号。NginxNginx平滑升级停止nginx主进程号ps -ef | grep nginx在进程列表里 面找master进程,它的编号就是主进程号了。信号从容停止Nginx: kill -QUIT 主进程号快速停止Nginx: kill -TERM 主进程号强制停止Nginx: pkill -9 nginx若在nginx

13、.conf配置了pid文件存放路径则该文件存放的就是Nginx主进程号,如果没指定则放在nginx的logs目录下。有了pid文 件,我们就不用先Nginx的主进程号,而直接向Nginx发送信号了,命令如下:kill -信号类型 '/usr/nginx/logs/nginx.pid'Nginx停止reload热升级需要回滚怎么办给旧的masterHUP信号. 旧的master会在不重新进程配置的情况下重新创建worker给新的master信号热升级回滚接收数据请求 查找虚机 查找location运行phase handler生成响应 过滤响应头过滤响应内容响应HTTP工作过程H

14、TTP工作typedef enum NGX_HTTP_POST_READ_PHASE = 0,/ real_ip, abtest, uuid, security_ieNGX_HTTP_SERVER_REWRITE_PHASE,/ rewrite(srv), antispider/ 内置, 选择location. 丢弃>client_max_body_size请求/ rewrite(loc)/ 内置, 实施跳转. Loop -> FIND_CONFIG (最多10次)NGX_HTTP_FIND_CONFIG_PHASE,NGX_HTTP_REWRITE_PHASE,NGX_HTTP_

15、POST_REWRITE_PHASE,NGX_HTTP_PREACCESS_PHASE,/ degradation, limit_req, limit_zone, ip2loc, suvNGX_HTTP_ACCESS_PHASE,NGX_HTTP_POST_ACCESS_PHASE,/ access , auth_basic (satisfy)/ 内置, 实施跳转/ 内置. 最后一个跳转/ autoindex, dav, gzip_static, index, staticNGX_HTTP_TRY_FILES_PHASE,NGX_HTTP_CONTENT_PHASE,NGX_HTTP_LOG_

16、PHASE ngx_http_phases;/ log, scribeHTTP工作http -> output filterhttp一个的过程实例配置Nginx配置实例说明实例配置Nginx配置实例说明实例配置Nginx配置实例说明实例配置Nginx配置实例说明内核优化(/etc/sysctl.conf)配置文件优化使用lua等Nginx优化net.ipv4.tcp_max_tw_buckets = 6000timewait的数量,默认是180000。net.ipv4.ip_local_port_range = 1024 65000系统打开的端口范围。net.ipv4.tcp_tw_re

17、cycle = 1 启用timewait快速回收。net.ipv4.tcp_tw_reuse = 1开启重用。将TIME-WAIT sockets重新用于新的TCP连接。net.ipv4.tcp_syncookies = 1开启SYN Cookies,当出现SYN等待队列溢出时,启用cookies来处理。net.core.somaxconn = 262144web应用中listen函数的backlog默认会给我们内核参数的net.core.somaxconn限制到128,而Nginx内核参数定义的NGX_LISTEN_BACKLOG默认为511,所以有必要调整这个值。dev_max_backl

18、og = 262144每个网络接口接收数据包的速率比内核处理这些包的速率快时, 送到队列的数据包的最大数目。Nginx内核优化net.ipv4.tcp_max_orphans = 262144系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。如果超过这个数字,孤儿连接将即刻被复位并打印出警告信息。这个限制仅仅是为了防止简单的DoS过分依靠它或者人为地减小这个值,更应该增加这个值(如果增加了内存之后)。net.ipv4.tcp_max_syn_backlog = 262144,不能的那些尚未收到客户端确认信息的连接请求的最大值。对于有128M内存的系统而言,缺省值是1024,小内存

19、的系统则是128。net.ipv4.tcp_timestamps = 0时间戳可以避免序列号的卷绕。一个1Gbps的链路肯定会遇到以前用过的序列号。时间戳能够让内核接受这种“异常”的数据包。这里需要将其关掉。net.ipv4.tcp_synack_retries = 1为了打开对端的连接,内核需要一个SYN并附带一个回应前面一个SYN的ACK。也就是所谓三次握手中的第二次握手。这个设置决定了内核放弃连接之前net.ipv4.tcp_syn_retries = 1SYN+ACK包的数量。在内核放弃建立连接之前net.ipv4.tcp_fin_timeout = 1SYN包的数量。如果套接字由本端

20、要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。对端可以出错并永远不关闭连接,甚至意外当机。缺省值是60秒。2.2 内核的通常值是180秒,你可以按这个设置,但要记住的是,即使你的字而内存溢出的风险,FIN- WAIT-2的但是它们的生存期长些。net.ipv4.tcp_keepalive_time = 30是一个轻载的WEB服务器,也有因为大量的死套接性比FIN-WAIT-1要小,因为它最多只能1.5K内存,当keepalive起用的时候,TCPkeepalive消息的频度。缺省是2小时Nginx内核优化worker_processes 8;Nginx配置文件进程数,建议按照

21、cpu数目来指定,一般为它的倍数。worker_cpu_affi00000001 00000010 00000100 00001000 0001000000100000 01000000 10000000;为每个进程分配cpu,上例中将8个进程分配到8个cpu,当然可以写多个,或者将一个进程分配到多个cpu。worker_rlimit_nofile 102400;这个指令是指当一个Nginx配置文件进程打开的最多文件描述符数目, 理论值应该是最多打开文件数(ulimit -n)与Nginx进程数相除,但是Nginx分配请求并不是那么均匀,所以最好与ulimit -n的值保持一致。use epo

22、ll;使用epoll的I/O模型worker_connections 102400;每个进程的最多连接数,理论上每台Nginx服务器的最大连接数为worker_processes*worker_connections。,在做反向worker_processes*worker_connections/4时为:Nginx配置优化全局配置client_header_buffer_size 4k;客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求头的大小超过1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小。分页大小可以用命令getconf PAGESIZE取得。

23、open_file_cache max=102400 inactive=20s;这个将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件数一致,inactive是指经过多长时间文件没被请求后删除缓存。open_file_cache_valid 30s;这个是指多长时间检查一次缓存的有效信息。open_file_cache_min_uses 1;open_file_cache指令中的inactive参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文件在inactive时间内一次没被使用,它将被移除。关于内核参数的优化:Ngi

24、nx配置优化HTTP服务器优化client_max_body_size 8m;客户端最大数据段大小server_names_hash_bucket_size 128; 服务器名的hash库大小large_client_header_buffers 4 4k;用来指定客户端请求中较大的消息头的缓存最大数量和大小,4为个数,4k为最大缓存4个4kbSenfile 参数用于开启高效文件传输模式,将tcp_nopush和y连个指令设置为on可以防止网络阻塞tcp_nfastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2keys_zone

25、=TEST:10m缓存路径,级别,检测时间,活动时间Nginx配置优化HTTP服务器优化keepalive_timeout 60;用于设置客户端连接保持活动的超时时间,超过这个时间后,服务器会关闭该Client_header_timeout用于设置客户端请求头超时时间,如果超过这个时间,客户端还没有错误”。任何数据,nginx将返回“R equit time out(408)Client_body_timeout用于设置客户端请求主体 过这个时间,客户端还没有equit time out(408)错误”。send_timeout超时时间,默认值为60,。如果超任何数据,nginx将返回“R用于

26、指定响应客户端的超时时间,这个超时仅限于两个连接活动之前的时间,如果超过这个时间,客户端没有任何活动, nginx将会关系连接。Nginx配置优化HTTP服务器优化gzipon;用于设置开启或者关闭gzip模块,on表示开启gzip压缩,试试压缩输出数据流。gzip_min_length1k;用于设置压缩的页面最小字节数,页面字节数从header头的content-length中获取,默认值是0,不管页面多大都进行压缩。建议设置成大于1k的字节数,小于1k可能会越压越大gzip_http_version1.1;用于设置识别HTTP协议版本,默认是1.1,目前大部分浏览器已经支持gzip压缩,使

27、用默认即可16k;gzip_buffers4表示申请4个为16k的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来储存gzip压缩结果gzip_comp_level2;用来指定gzip压缩比,1压缩比最小,处理速度最快;9压缩比最大,传输速度快,但处理最慢,也比较消耗CPUgzip_types *;用来指定压缩类型,无论是否指定,“text/html”类型总是会被压缩的gzip_varyon;该选项可以让前端的缓存服务器经过gzip压缩的页面,例如用Squid缓存经过nginx压缩的数据Nginx配置优化HttpGzip轮询默认方式,每个请求按照时间先后顺序逐一分配到不同的后

28、端服务器,如果后端某台服务器宕机,故障系统被自动提出,使用户Weight不受影响指定轮询值, Weight值越大,分配到的个服务器性能不均的情况下ip_hash几率越高,主要用于后端每每个请求按照的IP的hash进行分配,这样来自同一个IP的访客会固定一个后端服务器,有效解决了页存在的session共享问题fair这个是比上面两个更加智能的负载均衡算法,此种算法可以根据页面大小和加载时间长短智能的进行负载均衡,也就是根据后端服务器的响应时间来分配请求。响应时间段的优先分配。Nginx本身是不支持这种调度算法的,若需要使用必须url_hashnginx的upstream_fair模块此方法按照u

29、rl的hash进行分配请求,使每个url定向到同一台后端服务器,可以进一步提高后端缓存服务器的效率。Nginx本身是不支持这种调度算法的,若需要使用必须nginx的hash软件包Nginx负载均策略upstream ip_hash;server :80;server :80 down;server :8009 max_fails=3 fail_timeout=20s;在HTTP upstream 模块中,可以通过server指令指定后端服务器IP地址和端口,同时可以设定每个后端服务器在负载均衡调度中的状态,常见状态有-down,

30、表示当前的server暂不参与负载均衡-backup,预留的备份机,当其他所有非backup的或者忙的时候,才会请求backup出现故障-max_fails,请求失败的次数,默认为1,当超过最大次数时,范围proxy_next_ upstream 模块定义的错误-fail_timeout,在经历了max_fails次失败后,暂停服务的时间, max_fails可以和fail_timeout一起使用Nginx负载均策略fastcgi_connect_timeout 300;fastcgi连接存活时间fastcgi_send_timeout 300;存活时间fastcgifastcgi_read_

31、timeout 300;存活时间fastcgifastcgi_buffer_size 16k;fastcgi缓存块大小fastcgi_buffers 16 16k; fastcgi缓存块分配模式fastcgi_busy_buffers_size 16k; fastcgi繁忙时缓存块大小fastcgi_temp_file_write_size 16k; 临时文件写入大小fastcgi_cache_valid 200 302 1h; 缓存失效时间fastcgi_cache_min_uses 1;缓存最小使用时间Nginx配置优化Nginx 502的触发条件502错误最通常的出现情况就是后端主机当机

32、。在upstream配置里有这么一项配置:proxy_next_upstream,这个配置指定了nginx在从一个后端主机取数据遇到何种错误时会转到下一个后端主机,里头写上的就是会出现502的所有情况拉,默认是error timeout。error就是当机、断线之类的,timeout就是堵塞超时,比较容易理解。我一般是全写上的:proxy_next_upstream error timeout invalid_header http_500 http_503;不过现在可能我要去掉http_500这一项了,http_500指定后端返回500错误时会转一个主机,后端的jsp出错的话,本来会打印一堆

33、stacktrace的错误信息,现在被502取代了。503错误就可以保留,因为后端通常是apache resin,如果apache死机就是error,但resin死机,仅仅是503,所以还是有必要保留的。Nginx一些错误解决502解决办法查看当前的PHP FastCGI进程数是否够用:netstat -anpo | grep "php-cgi" | wc -l如果实际使用的“FastCGI进程数”接近预设的“FastCGI进程数”,那么,说明“FastCGI进程数”不够用,需要增大。部分PHP程序的执行时间超过了Nginx的等待时间,可以适当增加nginx.conf配置文

34、件中FastCGI的timeout时间,例如:http fastcgi_connect_timeout 300;fastcgi_send_timeout 300;fastcgi_read_timeout 300;.php.ini中memory_limit设低了会出错,修改了php.ini的memory_limit为64M,重启nginx,发现好了,原来是PHP的内存不足了。Nginx一些错误解决502解决办法增加children的数量,并且将max_requests 设置未 0 或者一个比较大的值打开 /usr/local/php/etc/php-fpm.conf调大以下两个参数(根据服务器实

35、际情况,过大也不行)<value name="max_children">5120</value> <value name="max_requests">600</value>增加缓冲区容量大小, client head buffer,fastcgi buffer size等如果主要是在一些post或者数据库操作的时候出现502这种情况,而不是在静态页面操作中常见,那么可以查看一下php-fpm.conf设置中的一项:request_terminate_timeout ,这个值是max_execution_

36、time,就是fast-cgi的执行0s时间。0s为关闭,就是无限执行下去。(当时装的时候没仔细看就改了一个数字)问题解决了,执行很长时间也改这个值5s 看看效果。出错了。优化fastcgi中,还可以改php-cgi进程数不够用、php执行时间长、或者是php-cgi进程死掉,都会出现502错误。Nginx一些错误解决502Nginx 504 Gateway Time-out的含义是所请求的网关没有请求到,简单来说就是没有请求到可以执行的PHP-CGI。调整nginx.conf的设置fastcgi_connect_timeout 600;fastcgi_send_timeout 600;fas

37、tcgi_read_timeout 600; fastcgi_buffer_size 256k; fastcgi_buffers 16 256k; fastcgi_busy_buffers_size 512k;fastcgi_temp_file_write_size 512k;Nginx一些错误解决504在上传时nginx返回了413错误在nginx.conf增加 client_max_body_size的相关设置, 这个值默认是1m,可以增加到8m以增加提高文件大小限制; 如果运行的是php,那么还要检查php.ini,这个大小client_max_body_size要和php.ini中的如

38、下值的最大值一致或者稍大,这样就误。post_max_size = 8M因为提交数据大小不一致出现的错upload_max_filesize = 2MNginx一些错误解决413nginx400错误是由于request header过大,通常是由于cookie中写入了较长的字符串所引起的。解决方法是不要在cookie里过多数据,如果实在需要的话可以考虑调整在nginx.conf中的client_header_buffer_size(默认1k)若cookie太大,可能还需要调整large_client_header_buffers(默认4k),该参数说明如下: 请求行如果超过buffer,就会报

39、HTTP 414错误(URI Too Long) nginx接受最长的HTTP头部大小必须比其中一个buffer大, 否则就会报400的HTTP错误(Bad Request)。Nginx一些错误解决400499对应的是 “client has closed connection”。这很有可能是因为服务器端处理的时间过长,客户端“不耐烦”了解决办法:proxy_ignore_client_abort on;意思还有一种服务端不要主要主动关闭客户端连接。是 确实是客户端关闭了连接,或者说连接超时,无论你设置多少超时时间多没用 原来是php进程不够用了子进程一下php进程数 问题解决 默认测试环境才

40、开5个Nginx一些错误解决499Nginx从0.7.48版本开始,支持了类似Squid的缓存功能;缓存把URL及相关组合当作Key,用md5编码哈希后保存; Nginx的Web缓存服务只能为指定URL或状态码设置过期时间,不支持类似Squid的PURGE指令,手动清除指定缓存页面;采用MMAP实现,设置的缓存区大小不能超过物理内存+SWAP的值。Nginx的缓存功能#设置Web缓存区名称为cache_one,缓存空间大小为2000MB,1天一次缓存,单个文件超过5m不缓存。proxy_cache_path /data0/proxy_cache_path levels=1:2 keys_zon

41、e=cache_one:2000m inactive=1d max_size=5m;#注:proxy_temp_path和proxy_cache_path指定的路径必须在同一分区proxy_temp_path /data0/proxy_temp_path;upstream my_server_pool serverserver :80 weight=1 max_fails=2 fail_timeout=30s; :80 weight=1 max_fails=2 fail_timeout=30s;反向中的Nginx.conf缓存配置serverlisten80;server_name ;location /proxy_set_header Host $host;proxy_set_header X-Forwarded-For $remote_addr;proxy_pass;location .*.(gif|jpg|jpeg|png|bmp|swf|js|css)$#对图片、JS、CSS进行缓存,使用Web缓存区cache_one proxy_cache cache_one;反向中的Nginx

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论