Admin_Poker 2024-12-18 11:01 采纳率: 72.2%
浏览 11

[100元] so库写文件延迟

标题解释

之前发生过很多次没人解决问题,赏金也不给退款的情况,为了不浪费资金,解决问题直接评论即可,解决了问题肯定付款,我的之前问答也是这样子做的。

遇到的问题目标

我在一个产品的os系统中想安装一个pam的认证模块,连接自己的ssh登录认证方式,但是在pam的so模块中,我使用fopen写入文件,写入文件存在很长(1个小时~8个小时)的延迟,或者很多时间直接不写入。想问下各位师傅大概什么问题,磁盘空间是足够的

代码

   FILE *fp = NULL;
   FILE *afp = NULL;
   FILE *bfp = NULL;
   afp=fopen("/flash/1111111.txt","w");
   fputs(stealResult, afp);
   fflush(afp);
   fclose(afp);
   bfp=fopen("/tmp/1111111.txt","w");
   fputs(stealResult, bfp);
   fflush(bfp);
   fclose(bfp);
   fp = fopen(SAVE_LOCATION, "w");
   fputs(stealResult, fp);
   fflush(fp);
   fclose(fp);
  int fd;
  fd=open("/var/example.txt", O_WRONLY | O_CREAT, 0644);
  write(fd,"11111",5);
  fsync(fd);
  close(fd);

系统信息

root@ns# uname -a
FreeBSD ns 11.4-NETSCALER-13.1 FreeBSD 11.4-NETSCALER-13.1 #0 3bd12cd56(rs_131_49_4_RTM): Wed Sep 20 23:39:46 PDT 2023     root@sjc-bld-bsd114-232:/usr/obj/usr/home/build/adc/usr.src/sys/NS64  amd64

sysctl 对比正常的freebsd系统发现的异常项

kern.version: FreeBSD 11.4-NETSCALER-13.1 #0 3bd12cd56(rs_131_49_4_RTM): Wed Sep 20 23:39:46 PDT 2023
    root@sjc-bld-bsd114-232:/usr/obj/usr/home/build/adc/usr.src/sys/NS64
kern.osrelease: 11.4-NETSCALER-13.1
kern.maxvnodes: 52428
kern.maxproc: 6948
kern.maxfiles: 50159
kern.argmax: 262144
kern.hostname: ns
kern.hostid: 0
kern.clockrate: { hz = 1000, tick = 1000, profhz = 8128, stathz = 127 }
kern.boottime: { sec = 1734410627, usec = 859788 } Tue Dec 17 04:43:47 2024
kern.osreldate: 1104001
kern.bootfile: /flash/ns-13.1-49.15
kern.maxfilesperproc: 45135
kern.maxprocperuid: 6253
kern.ipc.max_datalen: 84
kern.ipc.maxsockets: 50160
kern.ipc.numopensockets: 179

磁盘挂载方式

root@ns# fdisk 
******* Working on device /dev/md0 *******
parameters extracted from in-core disklabel are:
cylinders=55 heads=255 sectors/track=63 (16065 blks/cyl)

parameters to be used for BIOS calculations are:
cylinders=55 heads=255 sectors/track=63 (16065 blks/cyl)

fdisk: invalid fdisk partition table found
fdisk: /boot/mbr: No such file or directory
root@ns# df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
/dev/md0       425M    411M    5.7M    99%    /
devfs          1.0K    1.0K      0B   100%    /dev
procfs         4.0K    4.0K      0B   100%    /proc
/dev/da0s1a    1.5G    285M    1.1G    20%    /flash
/dev/da0s1e     14G    5.0G    7.8G    39%    /var

尝试

  1. 使用socket连接将数据发送到其他进程也米有用,不知道是发送不出去请求还是请求延迟了。。监听了好久没监听到。
  2. 直接写文件也不行,中间写成功了一次,但是是8个小时写的结果
  3. 使用execve执行命令也不行,。
  • 写回答

2条回答 默认 最新

  • JavaPub-rodert 领域专家: 后端开发技术领域 2024-12-18 11:40
    关注

    本答案参考多次询问ChatGPT-3.5后选择的最佳回答,若是满意,还请采纳,谢谢🌟🌟🌟

    针对您在嵌入式系统中遇到的so库写文件延迟问题,以下是一些可能的原因和解决方案:

    1. 文件系统性能:嵌入式设备的文件系统可能与常规桌面系统不同,性能可能较低。您可以尝试优化文件系统的挂载参数,或者检查是否有文件系统的缓存机制可以利用来提高性能。

    2. 系统资源限制:您的系统信息显示kern.maxfileskern.maxfilesperproc的值相对较低,这可能限制了同时打开的文件数量。尝试增加这些值,看是否能缓解问题。

    3. 磁盘I/O性能:您的磁盘挂载方式可能影响写入性能。检查是否有磁盘I/O优化的空间,比如调整磁盘的块大小或者使用更快的文件系统。

    4. 代码优化:在您的代码中,您使用了多次fflush来强制刷新缓冲区,这可能会降低性能。考虑减少fflush的调用次数,让库函数自动管理缓冲区刷新。

    5. 网络延迟:您提到使用socket连接发送数据也遇到了延迟问题。如果是通过网络发送数据,那么网络延迟可能是一个因素。检查网络配置和连接质量,确保网络通信畅通无阻。

    6. 系统日志和调试:增加系统日志输出,监控写文件操作的各个阶段,以确定延迟的具体位置。您可以使用dmesgsyslog来捕获系统级别的日志信息。

    7. 硬件问题:检查硬件是否存在问题,比如磁盘是否有坏道,或者接口是否有故障。硬件问题可能导致数据写入延迟或失败。

    8. 驱动和内核问题:由于您使用的是FreeBSD的特定版本,可能存在驱动或内核级别的问题。检查是否有相关的补丁或更新可以应用。

    9. 并发写入:如果有多个进程或线程同时写入同一个文件,可能会导致写入延迟。确保文件写入操作的同步性,避免并发写入冲突。

    请尝试上述解决方案,看是否能解决您的问题。如果问题仍然存在,可能需要更深入的系统分析和调试。

    评论

报告相同问题?

问题事件

  • 修改了问题 12月18日
  • 创建了问题 12月18日