AVAWEB系統(tǒng)性能調(diào)優(yōu)_第1頁
AVAWEB系統(tǒng)性能調(diào)優(yōu)_第2頁
AVAWEB系統(tǒng)性能調(diào)優(yōu)_第3頁
AVAWEB系統(tǒng)性能調(diào)優(yōu)_第4頁
AVAWEB系統(tǒng)性能調(diào)優(yōu)_第5頁
已閱讀5頁,還剩14頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、JAVA WEB統(tǒng)性能調(diào)優(yōu)廣州合道信息科技2021年3月文檔信息工程名:工程編號(hào): 羅承偉創(chuàng)立日期:2021-03-21使用者:標(biāo)題:Javaweb 系統(tǒng)性能調(diào)優(yōu)方案分類:部門名稱:研發(fā)部版權(quán)聲明:文檔狀態(tài)文檔狀態(tài)口草稿正式文檔評(píng)審人員評(píng)審組組長:評(píng)審組成員:評(píng)審時(shí)間修訂文檔歷史記錄日期版本 說明作者2021-03-21初稿羅承偉目錄1 .性能調(diào)優(yōu)流程性能調(diào)優(yōu)無疑是個(gè)龐大且復(fù)雜的話題,也是工程中非常重要的一環(huán).由于性能調(diào)優(yōu)涵蓋的面實(shí)在是太多了,我們僅看看性能調(diào)優(yōu)過程中常見的一些做法.、確定調(diào)優(yōu)目標(biāo)性能調(diào)優(yōu),首先是要確定性能調(diào)優(yōu)的目標(biāo)是什么,如果現(xiàn)在應(yīng)用已經(jīng)滿足了需求,就沒必要去做性能調(diào)優(yōu)了,

2、畢竟不經(jīng)過一個(gè)系統(tǒng)的過程,其實(shí)是無法確定你所做的性能調(diào)整是否 真的調(diào)優(yōu)了性能,是否沒有造成應(yīng)用中其他的問題,所以確定性能目標(biāo)是非常重要的,在定義性能目標(biāo)的時(shí)候通常這么定義的呢:1 .最大并發(fā)數(shù)2 . Quality of Service效勞的質(zhì)量,在軟件系統(tǒng)方面我們認(rèn)為主要表現(xiàn)在請(qǐng)求的出錯(cuò)率,系統(tǒng)的 load等.3 .最長響應(yīng)時(shí)間對(duì)于任何請(qǐng)求所能承受的最大響應(yīng)時(shí)間.4 . TPS每秒需要支持的最大事務(wù)數(shù),最典型的指標(biāo)是:“某頁面最高需要支撐每秒3000次的訪問次數(shù)例如一個(gè)web系統(tǒng),需要定義出來的目標(biāo)是:并發(fā)目標(biāo):最高支撐 200并發(fā);QoS出錯(cuò)率須限制在萬分之一,系統(tǒng)的 load最高只能到達(dá)

3、10;TPS每秒完成3000次請(qǐng)求的處理;最大響應(yīng)時(shí)間:最長允許的響應(yīng)時(shí)間為5秒.至于請(qǐng)求的平均響應(yīng)時(shí)間這些就不在性能調(diào)優(yōu)目標(biāo)中定義,由于要到達(dá)TPS的要求,響應(yīng)時(shí)間是必須要到達(dá)一個(gè)級(jí)別的,而且響應(yīng)時(shí)間隨著高并發(fā)是會(huì)出現(xiàn)劣化的.當(dāng)然,還可以把性能指標(biāo)定到更為細(xì)節(jié),例如某個(gè)方法的TPS在100并發(fā)時(shí)需要達(dá)到多少.在確定好了性能目標(biāo)后,重要的就是如何來測量系統(tǒng)的性能了.、測量系統(tǒng)性能對(duì)于新系統(tǒng)而言,需要評(píng)估出其正式運(yùn)行時(shí)的數(shù)據(jù)量的增長情況;而對(duì)于已運(yùn)行的系統(tǒng),那么需要根據(jù)監(jiān)控獲取到系統(tǒng)的運(yùn)行數(shù)據(jù)例如頂峰并發(fā)數(shù)、系統(tǒng)的響應(yīng)速度情況、系統(tǒng)的load、網(wǎng)絡(luò)流量、每類請(qǐng)求在總的請(qǐng)求中所占的百分比等 .新系

4、統(tǒng)而言,要評(píng)估出具體的性能相對(duì)來說稍微好做一點(diǎn),由于此時(shí)系統(tǒng)通常較為單純,數(shù)據(jù)量的增長也不可能是一夜之間增長的,因此根本可以根據(jù)一種正常的方法在測試環(huán)境評(píng)估出其正式運(yùn)行的性能.而對(duì)于已運(yùn)行的系統(tǒng)而言,那么較為麻煩,由于通常來講要在測試環(huán)境中模擬正式運(yùn)行環(huán)境根本是不太可能的,因此這個(gè)時(shí)候通常要采取一些模擬的方法或更高壓力的方法來盡量更 為準(zhǔn)確的評(píng)估出系統(tǒng)的性能.在測試系統(tǒng)性能時(shí),通??刹捎玫姆椒ㄓ校? .單元測試可借助單元測試來測試某個(gè)請(qǐng)求的性能2 .壓力測試壓力測試無疑是測量系統(tǒng)性能中最常采用的方式,根據(jù)定義的性能目標(biāo)對(duì)系統(tǒng)進(jìn)行壓力測試,以確定系統(tǒng)是否滿足性能要求,同時(shí)也可以根據(jù)壓力測試的結(jié)果

5、來分析系統(tǒng)的瓶頸,進(jìn)而進(jìn)行對(duì)應(yīng)的調(diào)優(yōu),可用于做壓力測試的工具還是不少的,像loadrunner、Jmeter等.由于性能測試屬于測試團(tuán)隊(duì)的工作范疇,就不在這展開去講了.、分析性能瓶頸根據(jù)測量系統(tǒng)性能的結(jié)果,多數(shù)是可以分析出系統(tǒng)性能瓶頸,同時(shí)還可以結(jié)合像jvm堆棧、jpro巾ler 、系統(tǒng)日志等來進(jìn)行進(jìn)一步確實(shí)定,另外也可以根據(jù)性能調(diào)優(yōu)人員的經(jīng)驗(yàn),例如可以去了解開發(fā)人員是否采用了不適合的數(shù)據(jù)結(jié)構(gòu)等.2. JVM性能調(diào)優(yōu)工作中我們使用開源的 J2EE容器較多,一般常用的就是tomcat及jboss,網(wǎng)上對(duì)tomcat 和jboss進(jìn)行優(yōu)化的資料很多,本文僅僅對(duì)JVM參數(shù)進(jìn)行討論.、JVM內(nèi)存組成及

6、分配JAVA內(nèi)存組成介紹:堆(Heap)和非堆(Non-heap)內(nèi)存根據(jù)官方的說法:“Java虛擬機(jī)具有一個(gè)堆, 堆是運(yùn)行時(shí)數(shù)據(jù)區(qū)域,所有類實(shí)例和數(shù)組的內(nèi)存均從此處分配.堆是在Java虛擬機(jī)啟動(dòng)時(shí)創(chuàng)立的.“在JVM中堆之外的內(nèi)存稱為非 堆內(nèi)存(Non-heap memory).可以看出JVM主要治理兩種類型的內(nèi)存:堆和非堆.簡單來說 堆就是Java代碼可及的內(nèi)存,是留給開發(fā)人員使用的;非堆就是JVM留給 自己用的,所以方法區(qū)、JVM內(nèi)部處理或優(yōu)化所需的內(nèi)存 (如JIT編譯后的代碼緩存)、每個(gè)類結(jié)構(gòu)(如運(yùn)行 時(shí)常數(shù)池、字段和方法數(shù)據(jù))以及方法和構(gòu)造方法的代碼都在非堆內(nèi)存中. 組成圖方法棧地方法

7、棧線程創(chuàng)立時(shí)產(chǎn)生,方法執(zhí)行時(shí)生成棧幀方法區(qū)存儲(chǔ)類的元數(shù)據(jù)信息常量等 堆Java代碼中所有的new操作native Memory(C heap)Direct Bytebuffer JNI Compile GC、堆內(nèi)存分配JVM初始分配的內(nèi)存由-Xms指定,默認(rèn)是物理內(nèi)存的1/64 ; JVM最大分配的內(nèi)存由-Xmx 指 定,默認(rèn)是物理內(nèi)存的1/4.默認(rèn)空余堆內(nèi)存小于 40%時(shí),JVM就會(huì)增大堆直到-Xmx的最 大限制;空余堆內(nèi)存大于 70%寸,JVM會(huì)減少堆直到-Xms的最小限制.因此效勞器一般設(shè) 置-Xms、-Xmx相等以防止在每次 GC后調(diào)整堆的大小.對(duì)象的堆內(nèi)存由稱為垃圾回收器的自 動(dòng)內(nèi)存

8、治理系統(tǒng)回收.組成詳解Young Generation即圖中的 Eden + From Space + To SpaceEden存放新生的對(duì)象Survivor Space有兩個(gè),存放每次垃圾回收后存活的對(duì)象Old GenerationTenured Generation即圖中的.口 Spacex存放應(yīng)用程序中生命周期長的存活對(duì)象、非堆內(nèi)存分配JVM使用-XX:PermSize 設(shè) 置非堆內(nèi)存初始值,默認(rèn)是物理內(nèi)存的1/64;由XX:MaxPermSize設(shè)置最大非堆內(nèi)存的大小,默認(rèn)是物理內(nèi)存的1/4.組成詳解PermanentGeneration保存虛擬機(jī) 自 己的 靜態(tài)refective數(shù)據(jù)

9、 主要存 放加載的Class 類級(jí)力U靜態(tài)對(duì)象如class 本身,method ,field 寸寸permanent generation空間/、足會(huì)引發(fā) full GC詳見Code Cache用于編譯和保存本地代碼 native code 的內(nèi)存 JVM內(nèi)部處 理或優(yōu)化、JVM內(nèi)存限制最大值JVM內(nèi)存的最大值跟操作系統(tǒng)有很大的關(guān)系.簡單的說就32位處理器雖然 可控內(nèi)存空間有4GB,但是具體的操作系統(tǒng)會(huì)給一個(gè)限制,這個(gè)限制一般是2GB-3GB一般來說Windows系統(tǒng)下為,Linux系統(tǒng)下為2G-3G,而64bit以上的處理器就不會(huì)有限制了.、JVM參數(shù)詳解參數(shù)名稱含義默認(rèn)值-Xms初始堆大小

10、物理1內(nèi)存 的1/64(113543K(130112K),secs Full GC121376K-10414K(130112K), secs-XX:+PrintGCDetails輸出形式:GC DefNew:8614K-781K(9088K), secs118250K-113543K(130112K),secs GCDefNew:8614K-8614K(9088K),secsTenured:112761K-10414K(121024K),secs121376K-10414K(130112K), secs-XX:+PrintGCTimeStamps-XX:+PrintGC:PrintGCTime

11、Sta mps可與-XX:+PrintGC-XX:+PrintGCDetails混合使用 輸出形式二GC 98328K-93620K(130112 K), secs-XX:+PrintGCApplicationStopp edTime打印垃圾回收期間程序暫停的時(shí)間可.與上面混合使用輸出形式:Total time for which application threads were stopped:seconds-XX:+PrintGCApplicationConcu rrentTime打印每次垃圾回收前程序未中斷的執(zhí) ,行時(shí)間可與上面混 .合使用輸出形式:Application time: s

12、econds-XX:+PrintHeapAtGC打印GC前后的詳 細(xì)堆棧信息-Xloggc:filename把相關(guān)日志信息記錄到文件以便分析與上面幾個(gè)配.合使用-XX:+PrintClassHistogramgarbage collects beforeprintingthe histogram.-XX:+PrintTLAB查有 TLAB 空間的 使用情況XX:+PrintTenuringDistribution查看每次minorGC后新的存活周期Desiredsurvivorsize的閾值1048576bytes,newthreshold7(max15) new threshold 7 即標(biāo)

13、識(shí)新的存活周期的閾值為7.、參數(shù)配置例如例如參數(shù)僅供參考:-server-Xms6000M-Xmx6000M-Xmn500M-XX:PermSize=500M-XX:MaxPermSize=500M -XX:SurvivorRatio=65536 -XX:MaxTenuringThreshold=0 -Xnoclassgc-XX:+DisableExplicitGC-XX:+UseParNewGC-XX:+UseConcMarkSweepGC-XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:+CMSC

14、lassUnloadingEnabled-XX:-CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=90 -XX:SoftRefLRUPolicyMSPerMB=0-XX:+PrintClassHistogram-XX:+PrintGCDetails-XX:+PrintGCTimeStamps-XX:+PrintHeapAtGC 說明:- XX:SurvivorRatio=65536 -XX:MaxTenuringThreshold=0就是去掉了 救助空間;- Xnoclassgc禁用類垃圾回收,性能會(huì)高一點(diǎn);- XX:+D

15、isableExplicitGC 禁止(),免得程序員誤調(diào)用gc方法影響性能;- XX:+UseParNewGC對(duì)年輕代采用多線程并行回收,這樣收得快;帶CM洛數(shù)的都是和并發(fā)回收相關(guān)的,不明白的可以查看上面的參數(shù)詳解或上網(wǎng)搜索.CMSInitiatingOccupancyFraction ,這個(gè)參數(shù)設(shè)置 有很大技巧,根本上滿足 (Xmx-Xmn)*(100-CMSInitiatingOccupancyFraction)/100=Xmn 就不 會(huì)出現(xiàn) promotion failed .在我的應(yīng)用中 Xmx是6000, Xmn是500,那么 Xmx-Xmn 5500兆,也就是年老代 有5500兆

16、,CMSInitiatingOccupancyFraction=90說明年老代到 90%i的時(shí)候開始執(zhí)行對(duì)年老代的并發(fā)垃圾回收(CMS,這時(shí)還剩10%勺空間是5500*10%=550兆,所以即使 Xmn(也就是年輕代共500兆)里所有對(duì)象都搬到年老代里,550兆的空間也足夠了,所以只要滿足上面的公式,就不會(huì)出現(xiàn)垃圾回收時(shí)的promotion failed ;3. J2EE應(yīng)用監(jiān)控J2EE應(yīng)用在運(yùn)行過程中,我們可以通過多種監(jiān)控手段來對(duì)應(yīng)用進(jìn)行監(jiān)控,監(jiān)控的內(nèi)容 包括數(shù)據(jù)庫資源的訪問,CPU占用,內(nèi)存占用,運(yùn)行狀態(tài).通過對(duì)容器及應(yīng)用的監(jiān)控,找出性能瓶頸,提升應(yīng)用的性能.、數(shù)據(jù)庫連接池監(jiān)控(Druid

17、)應(yīng)用系統(tǒng)性能出現(xiàn)問題,首先考慮進(jìn)行排查的就是數(shù)據(jù)調(diào)用的性能問題,是否存在性能較差的查詢,是否表結(jié)構(gòu)設(shè)計(jì)需要進(jìn)行優(yōu)化,是否加載了過多的數(shù)據(jù),占用了I/O及帶寬.公司JAVA平臺(tái)采用了阿里巴巴的開源數(shù)據(jù)庫連接池,能夠?qū)?shù)據(jù)庫的訪問及操作提供實(shí)時(shí) 的監(jiān)控及分析.、Druid連接池配置? 下載Druid一、下載jar 包maven central repository alibaba maven repository 二、或配置 Maven依賴,在 Maven配置文件中添加依賴 ? 開啟Druid內(nèi)置監(jiān)控頁面Druid內(nèi)置提供了一個(gè) StatViewServlet 用于展示 Druid的統(tǒng)計(jì)信息.這

18、個(gè)StatViewServlet的用途包括:提供監(jiān)控信息展示的 html頁面提供監(jiān)控信息的JSON API一、配置根據(jù)配置中的url-pattern來訪問內(nèi)置監(jiān)控頁面,如果是上面的配置,內(nèi)置監(jiān)控頁面的首頁是/druid/localhost:8080/druid/二、配置 allow 和 denyStatViewSerlvet展示出來的監(jiān)控信息比擬敏感,是系統(tǒng)運(yùn)行的內(nèi)部情況,如果你需要做訪問限制,可以配置 allow和deny這兩個(gè)參數(shù).比方:判斷規(guī)那么? deny優(yōu)先于allow ,如果在deny列表中,就算在allow 列表中,也會(huì)被拒絕.? 如果allow沒有配置或者為空,那么允許所有訪問

19、.、Druid連接池監(jiān)控假設(shè)要開啟更多監(jiān)控,請(qǐng)參見 Druid官方文檔:Druid監(jiān)控界面截圖:首頁數(shù)據(jù)源SQL監(jiān)控、容器治理及監(jiān)控psi-probePSI Probe是一個(gè)Lambda Probe的后續(xù)版本,主要是為了替換 Tomcat自帶的治理器, 可方便的治理和監(jiān)控 Tomcat及Jboss實(shí)例Jboss不支持7以上版本.、Tomcat下安裝部署1 .下載地址2 .安裝 解壓,將放進(jìn) webapps目錄.修改 CATALINA_HOME/conf/增加probe角色及人員,以 Tomcat7為例:其他配置如果要查看 System Information ,Linux版本:中參加如下語句:

20、windows版本:中參加:訪問監(jiān)控應(yīng)用 例如:3 . 權(quán)限限制probe 有 probeuser 、 poweruser、 poweruserplus 、 manager 針對(duì)不同 tomcat 版本 等角色,對(duì)應(yīng)可操作的功能如下表:特別注意一點(diǎn):表格里面的X表示擁有權(quán)限,也就是說,manager的權(quán)限是最大的,什么都能操作.在實(shí)際的生產(chǎn)運(yùn)維過程中,運(yùn)維人員可以創(chuàng)立具有 manager操作權(quán)限的賬號(hào),用于應(yīng)用的部署及效勞的維護(hù)相關(guān)操作.而為了方便工程組開發(fā)人員對(duì)本工程的維護(hù)和操作,可以開放權(quán)限較小的賬號(hào),便于跟蹤應(yīng)用的運(yùn)行狀態(tài),下載分析錯(cuò)誤日志及操作日志.Features by Rolepr

21、obeuserpoweruserpoweruserplusmanagerXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXContext: startXXXContext: stopXXXXXXXXContext: undeployXXXXXXXXXXXXXXXXSession: view last-accessed IPXXXXXXXXXXXXXXXXXXXXXXXXXXXData Source: listXXXXData Source: group by JDBC URLXXXXData Source: statusXXXXData Source: resetXXXData S

22、ource: testXXData Source: view query historyXXData Source: execute SQLXXXXXXXXXXXXXXLog: change levelXXXXXThread: list poolsXXXXThread: view execution stackXXXXXXXXConnector: real-time usage chartsXXXXCluster: statusXXXXCluster: real-time traffic chartsXXXXXXXXJVM: statusXXXXJVM: advise GCXJava Serv

23、ice Wrapper: statusXXXXJava Service Wrapper: restart JVMXXXXXXXXXSystem: OS detailsXX、probe監(jiān)控界面應(yīng)用程序可以啟動(dòng)/停止/卸載應(yīng)用應(yīng)用發(fā)布發(fā)布應(yīng)用日志可以在線查看,下載日志日志動(dòng)態(tài)調(diào)整日志級(jí)別線程監(jiān)控系統(tǒng)信息運(yùn)行監(jiān)控運(yùn)行監(jiān)控、JAVA虛擬機(jī)監(jiān)控Visual VMVisualVM 提供在 Java 虛擬機(jī)Java Virutal Machine, JVM上運(yùn)行的 Java 應(yīng)用程序的詳細(xì)信息.在 VisualVM 的圖形用戶界面中,您可以方便、快捷地查看多個(gè) Java應(yīng)用程序的相關(guān)信息.摘自官方簡單說來,

24、VisualVM是一種集成了多個(gè) JDK命令行工具的可視化工具,它能為您提供 強(qiáng)大的分析水平.所有這些都是免費(fèi)的!它囊括的命令行工具包括jstat, JConsole, jstack,jmap和jinfo ,這些工具與JDK的標(biāo)準(zhǔn)版本是一致的.可以使用VisualVM生成和分析海量數(shù)據(jù)、跟蹤內(nèi)存泄漏、監(jiān)控垃圾回收器、執(zhí)行內(nèi)存 和CPU分析,同時(shí)它還支持在MBeans上進(jìn)行瀏覽和操作.盡管VisualVM自身要在JDK6這 個(gè)版本上運(yùn)行,但是 以上版本的程序它都能監(jiān)控.、VisualVM 安裝VisualVM的一個(gè)最大好處就是,它已經(jīng)在你的JDK bin目錄里了,只要你使 用的是Update7之

25、后的版本.點(diǎn)擊一下圖標(biāo)它就可以運(yùn)行了.、VisualVM 簡介Visual VM 啟動(dòng)成功!可以看到 Visual VM 的界面了.通過 Visual VM 可以看到本機(jī) 運(yùn)行中的所有Java應(yīng)用.你會(huì)發(fā)現(xiàn)根本不需要在 VisualVM里為Java應(yīng)用程序注冊(cè),它們 就會(huì)自動(dòng)顯示出來.甚至還可以在導(dǎo)航欄里查看到遠(yuǎn)程的Java應(yīng)用.導(dǎo)航欄即為Applications ,其中分為 Local 本地Java應(yīng)用和 Remote 遠(yuǎn)程的Java應(yīng)用.、安裝插件Visual VM有很多好用的插件;而且 Sun為了推廣Visual VM還舉辦的Visual VM插 件開發(fā)大賽.如何安裝插件呢?步驟如下:1

26、 .點(diǎn)擊工具- 插件2 .推薦安裝全部插件本演示已經(jīng)安裝,所以僅顯示已安裝,可用插件為空、監(jiān)控本地JAVA應(yīng)用Visual VM 本身就是一個(gè)Java應(yīng)用,所以翻開 Visual VM看到的第一個(gè)可監(jiān)控應(yīng)用就 是Visual VM 本身;可以用它熱熱身,小試下牛刀.在 Visual VM 可視化界面中可以監(jiān)控 到Visual VM 本身的內(nèi)存使用情況、線程情況、Jvm啟動(dòng)參數(shù)、cpu消耗情況、垃圾回收情況等很多參數(shù).當(dāng)然如果在本地啟一個(gè)Tomcat一樣可以看到這些參數(shù),可以方便我們?cè)诒镜貙?duì)JVM進(jìn)行調(diào)優(yōu).、監(jiān)控遠(yuǎn)程JAVA應(yīng)用監(jiān)視遠(yuǎn)程Java應(yīng)用稍微復(fù)雜些. Visual VM是通過JMX來和遠(yuǎn)程Java應(yīng)用聯(lián)系的.JMX Java Management Extensions ,即Java治理擴(kuò)展,是一個(gè)為應(yīng)用程序、設(shè)備、系統(tǒng)等植入治理功能的框架.JMX可以跨越一系列異構(gòu)操作系統(tǒng)平臺(tái)、系統(tǒng)體系結(jié)構(gòu)和網(wǎng)絡(luò)傳輸協(xié)議,靈活的開發(fā)無縫集成的系統(tǒng)、網(wǎng)絡(luò)和效勞治理應(yīng)用.下面以1上白tomcat 7為例,表達(dá)下監(jiān)視遠(yuǎn)程 Java應(yīng)用的步驟 如

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論