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

做网站为什么能挣钱犀牛云做的网站怎么样

做网站为什么能挣钱,犀牛云做的网站怎么样,帝国cms 网站迁移错版,网站读取错误时怎样做目录 环境 问题情况 解决思路 原因分析 解决方法 番外知识 环境 VMware Workstation 16 Pro #xff08;版本#xff1a;16.1.2 build-17966106#xff09;ubuntu-22.04.2-desktop-amd64 问题情况 本人在运行百万并发的服务端程序时#xff0c;程序运行报#xff1a…目录 环境 问题情况 解决思路 原因分析 解决方法 番外知识 环境 VMware® Workstation 16 Pro 版本16.1.2 build-17966106ubuntu-22.04.2-desktop-amd64 问题情况 本人在运行百万并发的服务端程序时程序运行报段错误核心已转储导致程序异常退出如下 解决思路 首先要确定核心转储文件的生成路径和大小限制。然后使用调试器如 GDB来分析核心转储文件和堆栈跟踪信息后修复代码中导致“段错误”的原因。 原因分析 1.什么是段错误 段错误Segmentation Fault是一种常见的程序错误通常在访问无效的内存地址时发生。当程序试图访问一个不属于它的内存段时操作系统会发送一个信号SIGSEGV段错误信号给程序称为段错误。 2.可能产生段错误的情况 内存访问错误最常见的原因之一是程序试图访问无效的内存地址或未初始化的指针。这可能是由于代码错误、缓冲区溢出或内存越界等造成的。当程序尝试访问系统不允许访问的内存区域时操作系统会引发段错误。无效的指令或操作另一个常见原因是程序执行了无效的指令或操作。这可能是由于编译错误、错误的代码逻辑或架构不兼容性等引起的。当处理器尝试执行无效的指令或操作时会导致段错误。动态内存分配问题使用动态内存分配如 malloc 或 new时如果出现内存泄漏、重复释放已释放的内存或访问已释放的内存等问题可能导致段错误。这些问题可能是由于错误的内存管理导致的。栈溢出如果程序的栈空间超出了其允许的范围例如无限递归调用或大量局部变量使用导致的栈溢出会产生段错误。库或依赖项问题有时段错误可能是由于使用损坏的库、不兼容的版本或缺少的依赖项引起的。库的错误使用或配置问题可能导致段错误。硬件问题虽然比较罕见但硬件故障如内存损坏也可能导致程序报告段错误并生成核心转储。 3.核心已转储是转储到那儿 当程序发生段错误时操作系统会生成一个名为 core 或 core.进程ID 的核心转储文件其中包含了程序崩溃时的内存映像和其他相关信息。这个core文件通常会被转储到当前工作目录下。但我的 core 文件并没有生成到程序的工作目录下看下面解决... 解决方法 1.检查操作系统的核心转储文件core dump file生成设置 使用命令 ulimit -a 查看当前的核心转储文件大小限制和其他限制信息查找输出中的core file size核心转储文件大小字段红框中的 0 表示当前禁用了核心转储文件的生成。可以更改这个限制来启用核心转储文件的生成。 2.更改 core file size”字段 的限制来启用核心转储文件的生成 使用 ulimit -c unlimited 命令可以将core文件的大小限制设置为无限制但通过ulimit命令设置的参数仅在当前 shell 进程生效也就是当前会话。一旦关闭终端窗口设置将被重置为默认值。因此这种修改并不是永久性的。不推荐如果想要在系统级别永久修改core文件的生成大小限制需要进行操作系统的配置更改。可以通过修改 /etc/security/limits.conf 文件来设置core文件大小限制。添加或修改下面两行 *    soft    core    unlimited*    hard    core    unlimited重启虚拟机重新加载系统的参数配置以确保更改生效重启命令: sudo reboot 3.话不多说直接测试一下 不想跑服务端程序了太费时了直接写一个测试栗子代码如下 运行该测试栗子后并没有在工程目录下生成 core 文件。 4.确定一下 core 文件的生成路径 查找资料说Linux 内核有一个参数 kernel.core_pattern用于指定生成核心转储文件时的文件名和路径模式相关的配置文件为/proc/sys/kernel/core_pattern。而在 Linux 中可以使用 sysctl 命令来检查和更改核心转储文件的生成路径限制。然后使用 sysctl kernel.core_pattern 命令来查看当前的核心转储文件生成路径。它输出了下面一行内容 kernel.core_pattern |/usr/share/apport/apport -p%p -s%s -c%c -d%d -P%P -u%u -g%g -- %E上面这一行是啥意思呢解释如下 |/usr/share/apport/apport: 它是一个特殊的核心转储处理程序core dump handler它是一个用于收集和报告故障的工具。当进程收到 SIGSEGV 或类似的信号时内核将使用 kernel.core_pattern 中指定的处理程序来处理和处理核心转储文件。%p: 进程 ID。%s: 目前正在运行的线程 ID。%c: 产生核心转储文件的信号代码。%d: 序列号用于确保在同一目录中生成的核心转储文件具有唯一的名称。%P: 父进程 ID。%u: 用户名。%g: 组名。%E: 产生核心转储文件的可执行文件全路径。具体而言/usr/share/apport/apport 是一个用于 Ubuntu 系统的工具它可以收集有关崩溃和故障的信息并生成相应的错误报告。 5.修改 core 文件的生成路径 可以使用 sudo sysctl -w kernel.core_patternpath_to_directory/core 命令将其恢复为期望的路径。确保 path_to_directory 是一个有效的目录路径。比如 sudo sysctl -w kernel.core_patterncore重新编译一下在当前目录下生成了 core.进程ID 的核心转储文件如下注意以上方式修改 kernel.core_pattern 的值只在运行时生效并不是永久的在系统重启后该更改将被重置为默认值。可以了解最后一节“番外知识” 6.使用调试工具 gdb 来加载和分析 core 文件 生成核心文件使用 gcc 编译记得加 -g 命令。 加载核心文件使用gdb命令行加载核心文件将核心文件加载到调试环境中。 gdb 可执行文件路径 核心文件路径查看堆栈回溯运行gdb后使用bt命令或backtrace来查看堆栈回溯它将显示程序在崩溃时的函数调用链。 (gdb) bt检查变量值你可以使用print命令来检查变量的值。只需指定变量名即可查看其当前值。 (gdb) print variable_name跳转到特定帧使用frame命令可以在堆栈帧之间进行导航并查看在特定帧上的堆栈信息。帧编号通常是从0开始按逆序分配的也就是最底部帧的编号是0。 (gdb) frame frame_number分析原因分析堆栈回溯和变量值可以帮助你定位程序崩溃的原因。一般情况下最底部的堆栈帧提供了最初崩溃的位置。操作如下说明 *P 未初始化 番外知识 1.对 /proc/sys/kernel/core_pattern 可以添加可写权限吗 答案是不可以。默认权限如下所有者具有读写权限组用户和其他用户只有读取权限。 对于/proc/sys/kernel/core_pattern文件不能直接添加可读权限。这是因为/proc目录和其下的文件是虚拟文件系统procfs的一部分用于提供对内核和进程信息的访问它们的权限和所有权是由内核控制的而不受Linux文件系统权限模型的限制。在/proc目录中每个文件和目录的权限通常被设置为只读不允许用户直接修改它们的权限。这是为了确保提供的信息的完整性和一致性并防止对内核和进程状态的非授权更改。因此无法通过常规的 chmod 命令或其他方式直接向 /proc/sys/kernel/core_pattern添加可读权限或更改其权限。尝试执行类似以下命令时会出现错误 sudo chmod w /proc/sys/kernel/core_pattern你会收到“Operation not permitted”或“不允许的操作”类似的错误消息。 2.在系统重启后对 /proc/sys/kernel/core_pattern 文件的更改为什么被重置为默认值 这是因为/proc/sys/目录中的文件是在内核启动期间动态生成的其值来自于内核参数或其他系统设置。在系统重启时这些文件会重新加载为其默认值或由某些配置文件指定的值。 3.怎么实现永久性修改/proc/sys/kernel/core_pattern 文件呢这条有问题 编辑/etc/sysctl.conf文件这种方式不太好每次系统重启后要执行一下 sudo sysctl -p 命令才会修改/proc/sys/kernel/core_pattern的值 可以编辑 /etc/sysctl.conf 文件将核心转储文件模式的修改添加到该文件中添加内容如下 kernel.core_pattern core在保存并退出文件后使用以下命令重新加载配置使新的核心转储文件模式生效 sudo sysctl -p创建并编辑系统启动脚本可以编写一个脚本以在系统启动时将核心转储文件模式设置为所需的值。将脚本放置在适当的位置例如/etc/init.d/目录并设置为在系统启动时执行。(测试了没有用) 创建启动脚本文件在所选择的目录中创建一个新文件 sudo vim /etc/init.d/my_startup_script.sh编写启动脚本在脚本中添加如下内容保存成功并退出。 #!/bin/bashecho core /proc/sys/kernel/core_patternexit 0赋予脚本执行权限使用以下命令为启动脚本文件赋予执行权限 sudo chmod x /etc/init.d/my_startup_script.sh配置启动脚本的执行将启动脚本添加到系统的启动过程中以确保在系统启动时执行 sudo update-rc.d my_startup_script.sh defaults若要禁用脚本的启动可以使用以下命令了解 sudo update-rc.d -f my_startup_script.sh remove 注意 需要注意的是更改 /proc/sys/kernel/core_pattern 文件的权限和内容是敏感操作可能会影响系统的稳定性和安全性。务必小心谨慎并确保了解所做更改的影响。
http://www.w-s-a.com/news/229011/

相关文章:

  • asp网站怎么仿站推广软件下载平台
  • 电子商务网站建设期末试题08答案互联网怎么做
  • 规范门户网站的建设和管理办法微信网站开发公司电话
  • 免费行情网站凡客的官网
  • 做网站运营的女生多吗海淀企业网站建设
  • 网站运行环境配置网站建设个一般需要花费多少钱
  • 广西平台网站建设报价wordpress 免费 企业 主题
  • 四川省建设厅职称查询网站辽宁省住房和城乡建设部网站
  • 公司网站后台登陆网站放到云服务器上怎么做
  • 济南 网站定制做网站购买域名
  • 代理分佣后台网站开发怎么用源码做网站视频
  • 天津网站建设招标wordpress七牛图片插件
  • 建设合同施工合同示范文本汕头市网络优化推广平台
  • 网站关键词修改老王搜索引擎入口
  • 那个网站做搬家推广比较好建设部网站办事大厅栏目
  • 做企业销售分析的网站广州网站设计建设
  • 建站流程wordpress怎么开伪静态
  • 服务器不是自己的做违法网站videopro wordpress
  • 北京建网站的公司哪个比较好网站开通告知书
  • 网站负责人 主体负责人黑龙江 建设监理协会网站
  • 手机网站焦点图代码建设工程质量检测网站
  • 墙绘做网站推广有作用没html网页制作用什么软件
  • 企业做网站有用吗网站推广的常用方法有哪些?
  • 景安做网站教程互联网小程序开发
  • 桂林北站离阳朔多远贵州省建设厅住房和城乡建设官网二建考试
  • 浙江省建设厅 网站是多少wordpress淘宝客一键
  • 网站流量少怎么做5个不好的网站
  • 随州网站建设有限公司个人申请注册公司需要多少钱
  • 东莞做商城网站建设wordpress批量下载外链图片
  • 新网站建设运营年计划书仓山区建设局招标网站